Пожалуйста помогите решить задачу по паскалю!!!
Создать файлы: фамилия автолюбителя, марка его машины, её цвет, номер машины(русская буква, за ней 3 цифры, затем еще две русских буквы). Вывести на экран фамилии, марку машины и цвет машин тех автолюбителей, чьи номера начинаются и заканчиваются одной буквой или сообщить об отсутствии таковых. Далее вывести на экран фамилии и номера машин тех автолюбителей, которые имеют машину заданной марки и цвета. Марку и цвет запросить у пользователя. Если таких автомобилей нет, сообщить об этом.
Всем заранее спасибо за помощь:)

Ответы

Ответ дал: Aillianna
0
uses crt;
const
    n = 10;

type
    Car = record
        DriverName: string[20];
        Mark: string[20];
        Number: string[6];
        Color: string[20];
    end;

var
    cars: array[1..n] of Car;
    i: integer;

function CarToString(c: Car): string;
begin
    CarToString := c.DriverName + ' ' + c.Mark + ' ' + c.Number + ' ' + c.Color;
end;

procedure WriteToFile(data, file_name: string);
var
    f: text;
begin
    Assign(f, file_name);
    Rewrite(f);
    Write(f, data);
    Close(f);
end;

procedure OpenFileToRead(file_name: string; var f: text);
begin
    Assign(f, file_name);
    Reset(f);
end;

procedure CreateFilesWithData(Drivers, Marks, Numbers, Colors: string);
var
    c: Car;
    s1, s2, s3, s4: string;
    i: integer;
begin
    for i := 1 to n do
    begin
        {c.DriverName := Random(9).ToString;}
        write('Имя водителя = ');
        readln(c.DriverName);
        s1 := s1 + c.DriverName + chr(13);
        
        {c.Mark := Random(9).ToString;}
        write('Марка = ');
        readln(c.Mark);
        s2 := s2 + c.Mark + chr(13);
        
        {c.Number := Random(100, 999).ToString + Random(100, 999).ToString;}
        write('Номер = ');
        readln(c.Number);
        s3 := s3 + c.Number + chr(13);
        
        {c.Color := Random(9).ToString;}
        write('Цвет = ');
        readln(c.Color);
        s4 := s4 + c.Color + chr(13);
    end;   
    
    WriteToFile(s1, Drivers);
    WriteToFile(s2, Marks);
    WriteToFile(s3, Numbers);
    WriteToFile(s4, Colors);
end;

procedure ReadFiles(Drivers, Marks, Numbers, Colors: string);
var
    f1, f2, f3, f4: text;
    i: integer;
begin
    OpenFileToRead(Drivers, f1);
    OpenFileToRead(Marks, f2);
    OpenFileToRead(Numbers, f3);
    OpenFileToRead(Colors, f4);
    
    i := 0;
    while not Eof(f1) do
    begin
        i := i + 1;
        
        ReadLn(f1, cars[i].DriverName);
        ReadLn(f2, cars[i].Mark);
        ReadLn(f3, cars[i].Number);
        ReadLn(f4, cars[i].Color);
        {не учитывается вариант что кол-во строк может быть разным}
    end;
    
    Close(f1);
    Close(f2);
    Close(f3);
    Close(f4);
end;

function Query1(mark, color: string): string;
var
    s: string;
    i: integer;
begin
    for i := 1 to n do    
        if (cars[i].Mark = mark) and (cars[i].Color = color) then
            s := s + cars[i].DriverName + ' ' + cars[i].Number + chr(13);
    
    if s = '' then Query1 := 'Ничего не найдено'
    else Query1 := s;
end;

function Query2(): string;
var
    s: string;
    i: integer;
begin
    for i := 1 to n do    
        if (cars[i].Number[1] = cars[i].Number[Length(cars[i].Number)]) then
            s := s + cars[i].DriverName + ' ' + cars[i].Mark + ' ' + cars[i].Color + chr(13);
    
    if s = '' then Query2 := 'Ничего не найдено'
    else Query2 := s;
end;

var
    mark, color: string;

begin
    CreateFilesWithData('f1.txt', 'f2.txt', 'f3.txt', 'f4.txt');
    ReadFiles('f1.txt', 'f2.txt', 'f3.txt', 'f4.txt');
    for i := 1 to n do
        writeln(CarToString(cars[i]));
    
    Write('Искомая марка = ');readln(mark);
    Write('Искомый цвет = ');readln(color);
    writeln(Query1(mark, color));
    
    writeln('Hомера начинаются и заканчиваются одной буквой');
    writeln(Query2());
end.
Ответ дал: Аноним
0
У меня для "тяжелых случаев" специально сделана виртуальная машина и на ней все работает беспроблемно с кириллицей.
Ответ дал: Aillianna
0
второй запрос
Ответ дал: Aillianna
0
заполнение файлов можно закоментировать после первого раза. или вообще в ручную.
Ответ дал: Aillianna
0
учитель реально зад***т такое задавать.
Ответ дал: Аноним
0
Про учителя я все уже написал в комментарии к заданию)
Вас заинтересует