|
#1
|
||||
|
||||
2 задачки
Помогите пожалуйста с решением 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
|
||||
|
||||
Цитата:
|