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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2017, 14:10   #1
Alexey8123495
Новичок
Джуниор
 
Регистрация: 13.06.2017
Сообщений: 2
По умолчанию Вывод наибольшего элемента массива

Сведения об автомобиле состоят из номера, марки, фамилии владельца, признака прохождения техосмотра. Написать программу для занесения в массив информации о N автомобилях. Найти номера и владельцев автомобилей, не прошедших техосмотр. Определить, какой марки автомобилей больше всего.
С последним пунктом проблема. Программа работает как надо до момента вывода информации об отсутствии техосмотра включительно.
Код:
type 
   car= Record
   marka: string [20];
   fio: string [20];
   nomer: integer;
   tex: char;
  end;
  Var
    park: array[1..10] of car;
    c: car;
    i,m,n: integer;
      Begin
        writeLn('Сколько машин в парке: ');
        ReadLn(n);
        writeLn ('Вводите данные по каждой машине');
        For i:= 1 to n do
        with park[i] do begin
        write ('Введите марку',i,'-го автомобиля');
        ReadLn(marka);
        write ('Введите фамилию',i,'-го владельца');
        ReadLn(fio);
        write ('Введите номер',i,'-го автомобиля');
        ReadLn(nomer);
        write ('Введите техосмотр',i,'-го автомобиля');
        ReadLn(tex);
      end;
        writeLn ('Номера и владельцы автомобилей без техосмотр');
        for i:=1 to n do
        if park[i].tex='-' then writeLn (park[i].fio:17, park[i].nomer:9);
        writeLn('Какой марки автомобилей больше всего');
        for i:= 1 to n-1 do
           begin
             for m:= i+1 to n do
             if park[i].marka> park[m].marka then
               begin
                 c:= park[i];
                 park[i]:= park[m];
                 park[m]:= c;
               end;
             writeLn (park[m].marka:12);
           end;
        ReadLn
      End.
Alexey8123495 вне форума Ответить с цитированием
Старый 13.06.2017, 14:23   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Если я правильно понял код - у Вас есть сортировка записей по марке авто, но нет подсчёта количества для каждой марки.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 13.06.2017, 14:36   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Alexey8123495 Посмотреть сообщение
Код:
 writeLn('Какой марки автомобилей больше всего');
        for i:= 1 to n-1 do
           begin
             for m:= i+1 to n do
             if park[i].marka> park[m].marka then
....
этим кодом Вы сортируете массив по маркам (причём сортировка осуществляется в лексиграфическом (алфавитном) порядке.
Это не даёт Вам количества.
А Вам нужно количество (и при этом найти максимальное значение).

это можно сделать по такому алгоритму (схематично и НЕ ОПТИМАЛЬНО, зато просто):
Код:
markMostFreqIndex := 1; {считаем, что первая марка встречается чаще всего}
countMost := CountOfTheMark(park, n, 1); {подсчёт, сколько раз встретилась марка 1}

{ теперь поиск максимума: }
for i:=2 to n do begin
   countCurrent := CountOfTheMark(park, n, i);
   if countCurrent>countMost then begin
      markMostFreqIndex := i;
      countMost := countCurrent
   end; 
end;

WriteLn('Наиболее часто ( ', countMost, ' раз ) встречается марка: ',park[markMostFreqIndex].marka);
ну и последнее функция для подсчёта может быть "в лоб" написана так
Код:
type 
  TArrayOfCar =  array[1..10] of car;
var
  park: TArrayOfCar;

function CountOfTheMark( p : TArrayOfCar; n, Index : integer) : Integer;
var j, rez : integer;
begin
   rez := 0;
   for j:=1 to n do 
     if p[j].marka = p[Index].marka then Inc(rez);
   CountOfTheMark := rez;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив m*n. Составить массив из наименьших элементов каждой строки данного массива. Найти сумму наибольшего и наименьшего элемента массива. Miriam_ Паскаль, Turbo Pascal, PascalABC.NET 2 23.04.2017 11:18
Программа нахождения наибольшего по модулю элемента Swetic Помощь студентам 2 24.05.2013 10:55
Вывод значений элемента массива в delphi Artem_host Общие вопросы Delphi 3 11.02.2012 21:29
Определение наибольшего элемента последовательности. sldiplo Общие вопросы C/C++ 6 10.06.2010 22:38
Определить индекс и значение наибольшего попадающего в интервал (-5,0) элемента. В случае отсутствия тако Ferghost Общие вопросы C/C++ 2 31.05.2009 14:08