|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.06.2007, 18:15 | #1 |
Новичок
Джуниор
Регистрация: 28.06.2007
Сообщений: 2
|
задачка "Массив стуктур (список)"
Задача.
Дан список товаров. Известно наименование, цена за единицу, поставщик, кол-во единиц в партии. 1) Отсортировать массив структур (список) по возрастанию общей стоимости партии товара. 2) Напечатать список товаров от заданного поставщика. Все данные списка берём из текстового файла (я сделал, см. ниже), текстовый файл выглядит так: photo;12.1;fanta;3; milk;4;cola ;5; banan;11;pepsi;20; penal;34;pepsi;1; Печать этого списка я тоже сделал (см. ниже). В общем я не знаю как записать сортировку и вырезку. P.S. Вся программа состоит из процедур и функций. program ctructura; {$APPTYPE CONSOLE} uses SysUtils; const n=10; //количество строк type sklad=record cena:real; // цена postavshik,tovar:string[15]; // поставщик, название товара edin:integer; // кол-во товара end; indexn=1..n; tmas=array[indexn] of sklad; procedure text2mas(var ft:textfile; var m:tmas; var n1:integer); var s,s1:string; // строка, вспомогательная строка t:sklad; // структура j,err:integer; // номер позиции Begin reset(ft); n1:=0; while not eof(ft) and (n1<n) do begin readln(ft,s); //товар j:=pos(';',s); if j=0 then begin writeln('net zapisi'); readln; halt; end; t.tovar:=copy(s,1,j-1); delete(s,1,j); // цена j:=pos(';',s); if j=0 then begin writeln('net zapisi'); readln; halt; end; s1:=copy(s,1,j-1); val(s1,t.cena,err); //перевод строки в число if err>0 then begin writeln('error in cena'); readln; halt; end; delete(s,1,j); //поставщик j:=pos(';',s); if j=0 then begin writeln('net zapisi'); readln; halt; end; t.postavshik:=copy(s,1,j-1); delete(s,1,j); //количество товара j:=pos(';',s); if j=0 then begin writeln('net zapisi edin'); readln; halt; end; s1:=copy(s,1,j-1); val(s1,t.edin,err); //перевод строки в число if err>0 then begin writeln('error in edin'); readln; halt; end; // delete(s,1,j); n1:=n1+1; m[n1]:=t; end; closefile(ft); end; procedure print(const u:tmas; n1:integer); var i:integer; begin for i:=1 to n1 do with u[i] do begin writeln('---------------------------------------------'); writeln('|',tovar:10,'|',cena:10,'| ',postavshik:10,'|',edin:10,'|'); end; writeln('---------------------------------------------'); end; var f1:textfile; m1:tmas; fn:shortstring; n2:integer; begin write('file name: '); readln(fn); writeln; AssignFile(f1,fn); writeln; text2mas(f1,m1,n2); writeln; print(m1,n2); readln; end. |
28.06.2007, 18:26 | #2 |
Форумчанин
Регистрация: 24.06.2007
Сообщений: 351
|
Совет на будующее, файл лучше делать так
photo 12.1 fanta 3 milk 4 cola 5 ... Проще будет работать... Я бы сделал так: Создал запись(zap=record) массив типа записи (a:array[1..n] of zap) Весь файл занес бы в массив И там уже сортировал, вырезал удолял и т.д. Я думаю если ты замутил такое, то, с тем что я предложил у тебя проблем возникнуть недолжно Я не маюсь бездельем, я от него тащусь!
|
28.06.2007, 18:31 | #3 |
Новичок
Джуниор
Регистрация: 28.06.2007
Сообщений: 2
|
Мне по другому никак нельзя, у нас в группе у всех такие задания, и никто не сделал
|
28.06.2007, 18:38 | #4 |
Форумчанин
Регистрация: 24.06.2007
Сообщений: 351
|
Ну файл тогда не трогай, заноси все эллементы в запись и колдуй
Я не маюсь бездельем, я от него тащусь!
Последний раз редактировалось Tayfun; 28.06.2007 в 18:41. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует | skobets | Общие вопросы C/C++ | 2 | 03.06.2008 06:51 |
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) | Dorvir | Microsoft Office Excel | 2 | 28.03.2008 10:03 |
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" | MAcK | Компоненты Delphi | 11 | 24.10.2007 10:49 |