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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2013, 13:47   #1
makskovalko
Пользователь
 
Аватар для makskovalko
 
Регистрация: 23.04.2012
Сообщений: 82
По умолчанию Задача "Редкое имя"

Помогите пожалуйста, решить задачу!

Входной файл input.txt:
содержит список учащихся школы. В каждой строке через пробел заданы Фамилия
Имя и Отчество ученика. Требуется определить, какое имя самое редкое.
Число учеников в школе <= 10000.

Файл результата output.txt: содержит одну строку с искомым именем.

Пример input.txt:
Пушкин Александр Сергеевич
Луканов Александр Сергеевич
Соколова Любава Викторовна
Иванов Иван Иванович
Сидоров Иван Петрович

output.txt для данного примера
Любава


Я заганял все имена в массив, но как потом можно найти самое редкое имя?

Код:
Type
 fio = record
  name,sname,otchestvo:string;
 end;

Var
 a:array[0..1000] of fio;
 i,j,n,m,k:integer;
 f1,f2:text;
 s,str,s1,s2,s3:string;
 b:array[0..10000] of string;
 c:array[0..1000] of integer;
 count:integer;
 
Begin
 Assign(f1,'input.txt');
 Assign(f2,'output.txt');
 Reset(f1);
 Rewrite(f2);
  while not Eof(f1) do
   begin
    Inc(i);
    readln(f1,s);
    Delete(s,1,Pos(' ',s));
    a[i].name:=Copy(s,1,Pos(' ',s)-1);
    Delete(s,1,Pos(' ',s));
    Delete(s,1,Length(s));
    Inc(n);
   end;
 Close(f1);
  for i:=1 to n do write(a[i].name,' ');
 Close(f2);
End.

Последний раз редактировалось Stilet; 06.06.2013 в 14:27.
makskovalko вне форума Ответить с цитированием
Старый 06.06.2013, 13:51   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Я заганял все имена в массив, но как потом можно найти самое редкое имя?
Упорядочить массив.
Abstraction вне форума Ответить с цитированием
Старый 06.06.2013, 14:22   #3
makskovalko
Пользователь
 
Аватар для makskovalko
 
Регистрация: 23.04.2012
Сообщений: 82
По умолчанию

Каким способом?
makskovalko вне форума Ответить с цитированием
Старый 06.06.2013, 14:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сделай массив записей:
Код:
 
type
 fio = record
  name,sname,otchestvo:string;
  Count:integer;
 end;
a:array[0..1000] of fio;
При считывании проводи поиск по уже имеющимся записям, и если такое найдено - увеличивай на единицу поле count.
Ну а далее найходи максимальное из этих записей по Count и показывай на экран.
Ясно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.06.2013, 15:26   #5
makskovalko
Пользователь
 
Аватар для makskovalko
 
Регистрация: 23.04.2012
Сообщений: 82
По умолчанию

А можете написать код?
makskovalko вне форума Ответить с цитированием
Старый 06.06.2013, 15:46   #6
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Код:
a[i].name:=Copy(s,1,Pos(' ',s)-1);
    Delete(s,1,Pos(' ',s));
    Delete(s,1,Length(s));
вместо этого, вот это
Код:
temp_stroka:= Copy(s,1,Pos(' ',s)-1);
for z:=1 to i do
 if a[z].name = temp_stroka then inc (a[z].count) else a[z].name:= temp;
 temp_stroka:='';
тип переменных - объявите сами.
после чего вам нужно будет найти ту ячейку массива, у которой count, минимален (т.е. это обычный поиск минимального элемента в массиве)
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 06.06.2013, 16:06   #7
makskovalko
Пользователь
 
Аватар для makskovalko
 
Регистрация: 23.04.2012
Сообщений: 82
По умолчанию

Niro, Ваш вариант не работает!
makskovalko вне форума Ответить с цитированием
Старый 06.06.2013, 16:17   #8
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Вполне возможно) я не проверял, писал сразу в окне форума.
но желательно бы было указать, что не работает?
Не запускается, зависает, выдает неправильный результат?

Вообщем идею вам указал Stilet:
добавить в запись перменную count,
и загонять в массив не все подряд имена, а только если их там еще нету,
если есть, то увеличить счетчик на 1.

ну да, одна ошибочка закралась..
Код:
else a[z].name:= temp_stroka;
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
PHP(или другой язык): Получить все пары "имя" -> "значение" переданные методом POST KingOfNothing PHP 4 12.04.2009 14:06