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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 05:10   #1
Loreen
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 13
Вопрос Работа с записями(Paskal)

Создать массив из 10 записей, хранящих инфо об автовладельцах, фамилия, адрес, номер и марка авто. Посчитать количество автовладельцев, проживающих на заданной улице и имеющих авто заданной марки(исправьте пожалуйста программу.. две функции по выделенному предложению..)

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

const
    n=10;
type
      telem=record
      surname:string;
      model:string;
      number:string;
      address:string
end;
tmas=array [1..n] of telem;
var
  man:tmas;
  mn,choice,i:integer;
  exit_:char;
  error_in: boolean;
//-----------------------------------------------------------------------------------------//
Function menu :integer; //Вывод меню на экран
begin
    writeln;
    writeln (' ','1.Посчитать количество автовладельцев, проживающих на заданной улице ');
    writeln (' ','2.Посчитать количество автовладельцев, имеющих автомобиль заданной марки.');
    Writeln (' ','3.Завершение работы.');
    repeat
      write ('Ваш выбор: ');
      readln (choice);
      error_in:=(choice<1) or (choice >3);
      if error_in then writeln ('Ошибка ввода!')
    until not error_in;
    menu:=choice;
end;
//-----------------------------------------------------------------------------------------//
Procedure VvodDannuh(var a:tmas); //ввод данных
var i:integer;
begin
  SetConsoleOutputCP(1251);
  for i:=1 to n do
   with a[i] do
  begin
    Writeln('Введите фамилию:');
    Readln(surname);
    Writeln('Введите марку автомобиля:');
    Readln(model);
    Writeln('Введите номер:');
    Readln(number);
    Writeln('Введите адрес:');
    Readln(address);
    writeln('===========================');
  end
end;
//-----------------------------------------------------------------------------------------//
Procedure VuvodDannuh(a:tmas); //вывод данных
var i:integer;
begin
   SetConsoleOutputCP(1251);
   writeln ('--------------------------------------------------------------------------');
   writeln ('    Фамилия    |     Марка авто   |    Номер    |    Адрес    ');
   writeln ('--------------------------------------------------------------------------');
   for i:=1 to n do
   writeln(a[i].surname:15,' ', a[i].model:15,'   ', a[i].number:5,'   ', a[i].address:15);
end;
//-----------------------------------------------------------------------------------------//
Procedure Sortirovka; //упорядочение по адресам
var
 x:telem;
 i,j:integer;
begin
 for i:=1 to n do
  for j:=1 to n-i do
   if Ord(man[j].address[1])>Ord(man[j+1].address[1]) then
    begin
     x:=man[j];
     man[j]:=man[j+1];
     man[j+1]:=x
    end
end;
//-----------------------------------------------------------------------------------------//
Function Quantity_ul(a:tmas):integer;
var
  i,k: integer;
  ul: string;
begin
  Writeln('Введите улицу: ');
  Readln(ul);
  For i:=1 to n do
   If a[i].address=ul Then
   Inc(k);
    Writeln('Количество автовладельцев, проживающих на заданной улице:',  );
Quantity_ul:=k;

end;
//-----------------------------------------------------------------------------------------//
 Function Quantity_m(a:tmas):integer;
var
  i,k: integer;
  m: string;
begin
  Writeln('Введите марку: ');
  Readln(m);
  For i:=1 to n do
   If a[i].model=m Then
   Inc(k);
     Writeln('Количество автовладельцев, имеющих автомобиль заданной марки:', k);
Quantity_m:=k;

end;
//-----------------------------------------------------------------------------------------//
Begin
  SetConsoleOutputCP(1251);
  VvodDannuh(man);
  writeln;
  Sortirovka;
  VuvodDannuh(man);
  REPEAT
    mn:=Menu;
    case mn of
     1:begin
          
          Quantity_ul(man);


       end;
     2: begin
         
          Quantity_m(man);


        end
     end;
    if mn<>3 then
        begin
          Writeln;
          write (' ','Завершить работу? (Y/N)');
          readln(exit_);
        end;
  UNTIL (exit_='y') or (exit_='Y') or (choice=3);
  readln



END.
Loreen вне форума Ответить с цитированием
Старый 29.05.2012, 09:11   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

программа написано с недочётами (косяками).
Но это не суть.
Если бы вы самостоятельно писали, то переделать её под ваше задание было бы очень просто:\
Код:
//-----------------------------------------------------------------------------------------//
Function Quantity_Street_and_Model(a:tmas):integer;
var
  i,k: integer;
  ul, m: string;
begin
  Writeln('Введите улицу: ');
  Readln(ul);
  Writeln('Введите марку: ');
  Readln(m);
  k:=0;
  For i:=1 to n do
   If (a[i].address=ul) and (a[i].model=m) Then
      Inc(k);
  Writeln('Количество автовладельцев, проживающих на заданной улице и имеющих заданную марку: ', k);
  Quantity_Street_and_Model := k;
end;
//-----------------------------------------------------------------------------------------//
p.s. Вы объявили функции, но результаты, которые эти функции возвращают, нигде не используете. Это не очень правильно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2012, 05:51   #3
Loreen
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
программа написано с недочётами (косяками).
Но это не суть.
Если бы вы самостоятельно писали, то переделать её под ваше задание было бы очень просто:\
Код:
//-----------------------------------------------------------------------------------------//
Function Quantity_Street_and_Model(a:tmas):integer;
var
  i,k: integer;
  ul, m: string;
begin
  Writeln('Введите улицу: ');
  Readln(ul);
  Writeln('Введите марку: ');
  Readln(m);
  k:=0;
  For i:=1 to n do
   If (a[i].address=ul) and (a[i].model=m) Then
      Inc(k);
  Writeln('Количество автовладельцев, проживающих на заданной улице и имеющих заданную марку: ', k);
  Quantity_Street_and_Model := k;
end;
//-----------------------------------------------------------------------------------------//
p.s. Вы объявили функции, но результаты, которые эти функции возвращают, нигде не используете. Это не очень правильно.
спасибо за помощь. а вы можете изменить функцию так, чтобы она проверяла всех кто живёт на заданной улице, но при этом пользователь вводит ещё номер дома, но с номером она не считает(в шапке таблицы номер авто, если что)
Loreen вне форума Ответить с цитированием
Старый 03.06.2012, 16:33   #4
Loreen
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 13
По умолчанию

можете себя не утруждать. разобралась с дополнительной записью
Loreen вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с записями Namyola Паскаль, Turbo Pascal, PascalABC.NET 2 28.05.2011 16:50
Работа с записями Geramaster Фриланс 6 04.04.2011 20:13
Работа с записями dima-intro Помощь студентам 1 26.12.2010 13:43
Работа с записями (типизированные файлы)Paskal Cool_cool_death Помощь студентам 8 14.04.2010 22:37
Работа с записями Ol_Bak Microsoft Office Access 5 09.02.2010 20:22