![]() |
|
|
#1
|
||||
|
||||
|
Помогите пожалуйста с решением 2х простеньких задачек (желательно с пояснениями, а то на здаче спрашивают каждую строку программы, а я и не всегда могу обямнить
) сам я в функциях с удалением полный 0 а тут на зачет их дали.Код:
Задача 1: Дан двумерный массив. Удалить строку и столбец, на пересечении которых расположен наименьший по модулю элемент массива. Код:
Задача 2: Отредактировать заданное предложение, удаляя из него слова с нечетными номерами и переворачивая слова с четными номерами. (Пример: Уронили мишку на пол, результат: укшим лоп) .Последний раз редактировалось segas, 13.02.2009 в 16:22. |
|
#2
|
||||
|
||||
|
Тоесть я так понял, ты в этом не шариш вообще?)
Ну ладно, если будет время напишу.. |
|
#3
|
|||
|
|||
|
насчёт первой задачи, может я сильго ошибаюсь, но разве массив - не последовательность индексированных элементов? Если так, то что значит удалить строку/столбец?
|
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
||||
|
||||
|
Так, я те 1-ю задачу набросал... если чё-то нетак исправиш сам.
2-ю уже сам решай ))Размещай на форме stringgrid и button (Стринггрид шоб ты видел шо делаеться с массивом) Код:
procedure TForm1.Button1Click(Sender: TObject); const k=10;// количество строк b=5;// количество столбцов var a:array [1..k,1..b] of real;// двухмерный массив i,f:integer; // счётчики delcol,delrow:integer; // нужный нам номер колонки и строки amin:real; // наше минимальное значение begin stringgrid1.ColCount:=b; // Присваиваем стринггридду нужное количество строк и столбцов stringgrid1.RowCount:=k; amin:=10000000000000; /// ну эт шоб мало небыло for i:=0 to k-1 do for f:=0 to b-1 do begin a[i,f]:=-50 +Random(101); // Заполняем случайно числами от -50 до 50 stringgrid1.Cells[f,i]:=floattostr(a[i,f]); // заполняем таблицу if abs(a[i,f])<amin then begin // если значение ячейки меньше amin то amin:=abs(a[i,f]); // присваиваем amin это значение и запоминаем номера строки и столбца в котором находиться delcol:=f; delrow:=i; end; end; for i:=0 to k-1 do begin a[i,delcol]:=0; stringgrid1.Cells[delcol,i]:=''; // Удаляем строку end; for i:=0 to b-1 do begin a[delrow,i]:=0; stringgrid1.Cells[i,delrow]:=''; // Удаляем столбец end; end; |
|
#6
|
|||
|
|||
|
алгоритм решения 2й задачи:
1. Разбить предложения в массив строк по словам. 2. идем циклом по полученному массиву и собираем предложение обратно по условиям: если индекс нечетный - пропускаем, если четный - добавляем, переворачивая. 3. Переворот - работаем со строкой, как с массивом, идем от конца к началу и добавляем результат. Код:
// переворачивает строку
function ReverseStr(AStr : String) : String;
var
I : Integer;
begin
Result := '';
For I := Length(AStr) DownTo 1 Do Result := Result + AStr[i];
end;
// обрабатываем фразу
function ProcessPhrase(APhrase : String) : String;
var
I : Integer;
A : Array Of String;
begin
// разбиваем предложение на слова в массив
SetLength(A,0);
While Pos(' ',APhrase) > 0 Do
begin
SetLength(A,Length(A)+1);
A[High(A)] := Copy(APhrase,1,Pos(' ',APhrase) - 1);
APhrase := Copy(APhrase,Pos(' ',APhrase)+1,Length(APhrase) - Pos(' ',APhrase) + 1);
end;
If APhrase <> '' Then
begin
SetLength(A,Length(A)+1);
A[High(A)] := APhrase;
end;
// Выводим по условиям
// Дин. массив A имеет начало с 0!!!
Result := '';
For I := Low(A) To High(A) Do
If ((I+1) mod 2) = 0 Then
Result := Result + ReverseStr(A[i]) + ' ';
// Подчищает пробел в хвосте
Result := Trim(Result);
end;Использование: Код:
procedure TForm1.Button1Click(Sender : TObject) begin Edit2.Text := ProcessPhrase(Edit1.Text); end; |
|
#7
|
||||
|
||||
|
Цитата:
![]() |