Вопрос № 166613: Задача на записи. Известны средняя температура для каждого дня за прошедший месяц (известно, что все они были различны), вывести даты в порядке возрастания температур. Желательно не использовать текст.файлы а записывать данные в массив....
Вопрос № 166.613
Задача на записи. Известны средняя температура для каждого дня за прошедший месяц (известно, что все они были различны), вывести даты в порядке возрастания температур.
Желательно не использовать текст.файлы а записывать данные в массив.
Отправлен: 06.05.2009, 13:44
Вопрос задала: Solnce1387 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Genia007
Здравствуйте, Solnce1387! Нужно использовать двухмерный массив, в котором первый столбец будет дата а второй температура. В предлагаемом ответе для ввода температур и вывода результатов используется две сетки StringGrid: в первой вводится температура, а во вторую выводится результат. Сортировка происходит при помощи двухмерного массива методом обмена:
type TForm1 = class(TForm) BitBtn1: TBitBtn; StringGrid1: TStringGrid; StringGrid2: TStringGrid; procedure FormCreate(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private
{ Private declarations } public { Public declarations } end;
var Form1: TForm1; mas: Array of Array of integer; a: integer;
implementation
{$R *.dfm}
Procedure sort; var k: integer; // текущий элемент массива changed: boolean; // TRUE, если в текущем цикле были обмены buf, buf1: integer; // буфер для обмена элементами массива begin // сортировка массива методом обмена repeat Changed:= FALSE; // пусть в текущем цикле
нет обменов begin for k:= 0 to a - 2 do if mas[1, k] > mas[1, k + 1] then begin // обменяем k-й и k+1-й элементы buf := mas[1, k]; buf1:= mas[0, k]; mas[1, k] := mas[1, k + 1]; mas[0, k] := mas[0, k + 1]; mas[1, k + 1] := buf; mas[0, k + 1] := buf1; changed := TRUE; end; end; until not changed; //
если не было обменов, значит // массив отсортирован end;
procedure TForm1.BitBtn1Click(Sender: TObject); var i: integer; begin SetLength(mas, 2); SetLength(mas[0], 31); SetLength(mas[1], 31); for I := 0 to 30 do begin if StringGrid1.Cells[i,1] = '' then begin SetLength(mas[0], i); SetLength(mas[1], i); a:= i; break; end else begin mas[1,
i]:= strtoint(StringGrid1.Cells[i,1]); mas[0, i]:= strtoint(StringGrid1.Cells[i,0]); end; end; sort; for i := 0 to a - 1 do begin StringGrid2.Cells[i,1]:= inttostr(mas[1, i]); StringGrid2.Cells[i,0]:= inttostr(mas[0, i]); end;
end;
procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin for i := 0 to 30 do StringGrid1.Cells[i,0]:= Inttostr(i + 1);<
br>end;
end.
весь проект здесь --------- Помогли тебе, помоги и ты.
Ответ отправил: Genia007 (статус: Студент)
Ответ отправлен: 06.05.2009, 16:43
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 248735 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Вах какая прелесть!:)))
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.