Помощь - Поиск - Пользователи - Календарь
Полная версия: Процедура
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
rekrut
Дана запись, потом вводятся компоненты и записываются в файл, надо сделать процедуру которая открывает файл и находит страну производителя, продукции которой больше всего в магазине:



Unit MODUL;
Interface
type magazin=record
name,cont:string; {название товара и страна производитель (cont)}
price:integer; {цена товара}
wyear:integer; {гарантия (лет)}
End;{magazin}
Procedure con;
Var
f:file of magazin;
frm:magazin;
Implementation
Procedure con; {нахождение страны, товаров из которой больше всего}
Var i,max:integer;
Begin
Assign(f,'D:\db.dat');
reset(f);
max:=1;
for i:=1 to filesize(f) do
read(f,frm);
begin
if max<frm.kod then max:=frm.kod;
end;
reset(f);
for i:=1 to filesize(f) do
begin
read(f,frm);
if frm.kod>=max then writeln('товара больше всего из ',frm.cont,');
end;
close(f);
end;
End. {Unit}



В самой процедуре не знаю как сделать поиск или как определить что товара больше всего из тако то страны . Помогите пожалста!!!
volvo
Сначала попробуй сделать поиск по форуму... Задание решалось практически слово в слово...
мисс_граффити
...а совсем сначала переименуй тему.
заголовок должен быть информативным.
и вообще, почитай правила - нет желания делать замечания в каждой теме.
rekrut
базара нема ща поищу, а тему чето не пойму как переименовать ) ща тоже попробую
rekrut
Похожего много нашел, но ничего толкового, даже про страны были так же как и у меня, но там не тот поиск совсем задействуется что нужен мне. Мнеб хотя бы теоритически сказать а дальше сам попробую
volvo
function find_country: string;
var
country_count: array[1 .. 100] of record
country: string[20];
count: integer;
end;
counter: integer;
f: file of magazin;
R: magazin;
found: boolean;

begin
counter := 0;
assign(f, 'db.dat'); reset(f); { <--- Никаких проверок нет - добавишь сам }

while not eof(f) do begin
read(f, R);
found := false;
for i := 1 to counter do
if country_count[i].country = R.cont then begin
inc(country_count[i].count); found := true; break;
end;

// Не было найдено такой страны - добавляем ее в массив
if not found then begin
inc(counter);
with country_count[counter] do begin
country := R.cont; count := 1;
end;
end;

end;
close(f);

// Ну, а теперь просто пройди по всему массиву country_count, найди
// название страны, соответствующее максимальному значению поля count,
// и верни его как результат функции
end;


Как видишь, я немного ограничил длину названия страны - до 20 символов, чтобы не забирать из стека слишком много места...

P.S. Набирал прямо здесь, без компилятора - код просто для того, чтобы показать идею !!!
rekrut
Пасибо большое, блин сколько ты лет уже етот Паскаль знаешь шо так шаришь
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.