Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2007, 18:15   #1
Slytuz
Новичок
Джуниор
 
Регистрация: 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.
Slytuz вне форума Ответить с цитированием
Старый 28.06.2007, 18:26   #2
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Совет на будующее, файл лучше делать так
photo
12.1
fanta
3
milk
4
cola
5
...
Проще будет работать...
Я бы сделал так:
Создал запись(zap=record)
массив типа записи (a:array[1..n] of zap)
Весь файл занес бы в массив
И там уже сортировал, вырезал удолял и т.д.
Я думаю если ты замутил такое, то, с тем что я предложил у тебя проблем возникнуть недолжно
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Старый 28.06.2007, 18:31   #3
Slytuz
Новичок
Джуниор
 
Регистрация: 28.06.2007
Сообщений: 2
По умолчанию

Мне по другому никак нельзя, у нас в группе у всех такие задания, и никто не сделал
Slytuz вне форума Ответить с цитированием
Старый 28.06.2007, 18:38   #4
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

Ну файл тогда не трогай, заноси все эллементы в запись и колдуй
Я не маюсь бездельем, я от него тащусь!

Последний раз редактировалось Tayfun; 28.06.2007 в 18:41.
Tayfun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
если пользователь наберет какой-то другой символ не "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