Сведения об автомобиле состоят из его марки, номера и фамилии владельца - Pascal ABC
Формулировка задачи:
1. Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти:
а) фамилии владельцев и номера автомобилей данной марки;
б) количество автомобилей каждой марки.
Найденные данные записать в файл g.
Надо найденные данные записать в g. Никак не получается.
Решение задачи: «Сведения об автомобиле состоят из его марки, номера и фамилии владельца»
textual
Листинг программы
uses crt; const nmax = 20; line = '--------------------------------------------'; shap = '| Марка | Номер | Владелец |'; type avto = record m: string[15]; n: string[10]; v: string[10]; end; var f: file of avto; r: byte; g: text; procedure Vvod(var ff: file of avto); var i, nn: byte; z: avto; begin clrscr; rewrite(ff); repeat write('Количество автомобилей, не более ', nmax, ', n=');readln(nn); until nn in [1..nmax]; writeln('Внесите данные об автомобилях'); for i := 1 to nn do begin with z do begin write('Марка: ', i, ' автомобиля ');readln(m); write('Номер: ');readln(n); write('Фамилия владельца: ');readln(v); end; write(ff, z); end; close(ff); writeln('для продолжения нажмите Enter'); readln; end; procedure Vyvod(ff: file of avto); var z: avto; nn: integer; begin clrscr; reset(ff); nn := 0; writeln(g, 'Данные об автомобилях'); writeln(g, line); writeln(g, shap); writeln(g, line); while not eof(ff) do begin inc(nn); read(ff, z); with z do begin writeln(g, '|', m:16, '|':2, n:10, '|':2, v:11, '|':2); writeln(g, line); end; end; writeln(g, line); writeln(g, 'Всего автомобилей ', nn); writeln(g); writeln(g, 'для продолжения нажмите Enter'); readln; end; procedure Poisk(ff: file of avto); var k: byte; mm: string; z: avto; begin clrscr; write('Марка для поиска: '); readln(mm); k := 0; reset(ff); writeln(g, 'Данные об автомобилях марки "', mm, '"'); while not eof(ff) do begin read(ff, z); with z do if m = mm then begin inc(k); if k = 1 then begin writeln(g, line); writeln(g, shap); writeln(g, line); end; writeln(g, '|', m:16, '|':2, n:10, '|':2, v:11, '|':2); writeln(g, line); end; end; writeln(g, line); writeln(g, 'Всего автомобилей ', k); writeln(g); close(f); writeln('для продолжения нажмите Enter'); readln; end; procedure Count(ff: file of avto); var mar: array [1..nmax] of string; kol: array [1..nmax] of integer; i, j, k, d: byte; z: avto; begin clrscr; i := 0; k := 0; reset(ff); while not eof(ff) do begin read(ff, z); with z do begin k := 0; for j := 1 to i do if mar[j] = m then inc(k); if k = 0 then begin inc(i); mar[i] := m; end; end; end; reset(ff); d := i; while not eof(ff) do begin read(ff, z); with z do for i := 1 to d do if mar[i] = m then inc(kol[i]); end; writeln(g, line); writeln(g, 'Количество автомобилей каждой марки:'); for i := 1 to d do writeln(g, mar[i], '-', kol[i]); writeln(g); close(f); writeln('для продолжения нажмите Enter'); readln; end; begin assign(f, 'avto.dta'); if FileExists('avto.dta') then reset(f) else rewrite(f); assign(g, 'avto.txt'); if FileExists('avto.txt') then append(g) else rewrite(g); r := 1; repeat writeln('0-завершение работы'); writeln('1-ввод данных об автомобилях'); writeln('2-вывод данных об автомобилях'); writeln('3-вывод данных о владельцах автомобилей заданной марки'); writeln('4-количество автомобилей каждой марки'); readln(r); case r of 1: Vvod(f); 2: Vyvod(f); 3: Poisk(f); 4: Count(f); else r := 0; end; until r = 0; end.
Объяснение кода листинга программы
- В первой части кода определены константы и типы данных для работы с информацией об автомобилях.
- В второй части кода определены процедуры для ввода, вывода и поиска информации об автомобилях.
- В третьей части кода определена процедура для подсчета количества автомобилей каждой марки.
- В основной части кода определена последовательность действий пользователя с использованием функций и процедур из второй и третьей частей кода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д