Консультация № 138163
27.05.2008, 19:28
0.00 руб.
0 1 1
Уважаемые эксперты! Помогите, пожалуйста, решить задачу:

1. Дан массив данных об автомобилях заводского гаража (Формирование массива из файла и таким образом, чтобы в каждой строчке была вся информация по конкретному автомобилю): номер, марка, год выпуска, пробег, фамилия шофёра.
Вывести:
- сообщение о том, есть ли в гараже автомобиль заданной марки (да или нет) (с помощью цикла While);
- список машин, подготовленных на списание (старше 1980 года с пробегом более 50 000км), в списке указаны все данные, кроме фамилии шофёра;
-все записи, упорядоченные по признаку: фамилии шофёров в алфавитном порядке.

Заранее огромное спасибо! Swallow.

Обсуждение

давно
Профессор
401888
1232
27.05.2008, 22:01
общий
это ответ
Здравствуйте, Ласточка!
Видимо решение этой задачи в ответе на вопрс №136832 через типизированный файл Вас не устроило. Предлагаю решение с использованием текстового файла.
Создайте файл, заполните его данными – в каждой строке через пробел сведения об одной машине. Следующая с новой смтроки без отступа. Текстовые данные пишите латиницей, иначе программа не сможет работать с этим текстом.
Код в приложении. Рабочая часть кода (запросы)не изменилась, поэтому не комментирую.


Приложение:
uses crt;type Tgaraz=record {запись с полями по условию} nom:string[20]; mar:string[20]; god:word; prb:longint; fam:string[20]; end;var sp:array[1..100] of Tgaraz; {массив записей – список машин} n,c,i,k,j:integer; {разные счетчики, с-переменная в процедуре Val} s,m:string; {считываемая строка и переменная при вводе марки} buf:Tgaraz; {буфер типа запись при сортировке обменом} f:text; {переменная для связи с текстовым файлом} gd:word; {переменная при определении года} pr:longint; {переменная при определении пробега}beginclrscr;assign(f,‘Spisok.txt‘); {связываем переменную с файлом }reset(f); { открываем его для чтения }n:=0;while not eof(f)do begin readln(f,s); {считываем очередную строку} n:=n+1; {считаем ее} sp[n].nom:=copy(s,1,pos(‘ ‘,s)-1); {первое слово - номер} delete(s,1,pos(‘ ‘,s)); {удаляем его} sp[n].mar:=copy(s,1,pos(‘ ‘,s)-1); {второе слово - марка} delete(s,1,pos(‘ ‘,s)); val(copy(s,1,pos(‘ ‘,s)-1),gd,c); {третье слово – год - превращаем в число} sp[n].god:=gd; {присваиваем полю записи} delete(s,1,pos(‘ ‘,s));{то же с четвертым словом - пробег} val(copy(s,1,pos(‘ ‘,s)-1),pr,c); {} sp[n].prb:=pr; {} delete(s,1,pos(‘ ‘,s)); sp[n].fam:=s; {последнее слово - фамилия} end;writeln;write(‘Vvedite marku mashiny:‘);readln(m);k:=0;for i:=1 to n doif sp[i].mar=m then begin k:=k+1; end;if k>0 then writeln(‘Takaja marka est!‘)else writeln(‘Takoj marki net!‘);writeln;writeln(‘Spisok mashin k spisaniu:‘);for i:=1 to n doif (sp[i].god<1980)and(sp[i].prb>50000)then begin write(‘Nomer ‘,sp[i].nom,‘ Marka ‘,sp[i].mar); write(‘ God vypuska ‘,sp[i].god,‘ Probeg ‘,sp[i].prb); writeln; end;writeln;writeln(‘Spisok po familii shofera:‘);for i:=1 to n-1 dofor j:=1 to n-1 doif sp[j].fam>sp[j+1].fam then begin buf:=sp[j]; sp[j]:=sp[j+1]; sp[j+1]:=buf; end;for i:=1 to n do begin write(‘ Familia ‘,sp[i].fam,‘ Nomer ‘,sp[i].nom,‘ Marka ‘,sp[i].mar); write(‘ God vypuska ‘,sp[i].god,‘ Probeg ‘,sp[i].prb); writeln; end;readlnend.
Форма ответа