Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
WhiteNoise15
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 16
1

Вывести список неповторяющихся фамилий

23.06.2013, 13:27. Просмотров 950. Ответов 6
Метки нет (Все метки)

Дан строковый файл, содержащий упорядоченный по алфавиту список жителей района с указанием фамилии и инициалов. Вывести список неповторяющихся фамилий (учесть что одна и та же фамилия, принадлежащая мужчине и женщине, может отличаться окончанием).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2013, 13:27
Ответы с готовыми решениями:

Список фамилий упорядочить по алфавиту.
Список фамилий упорядочить по алфавиту. помогите решить задачу - очень надо!:)...

Список введенных фамилий упорядочить по алфавиту
Нужно список введенных фамилий упорядочить по алфавиту!!!

Упорядочить список фамилий, записанных латинскими буквами
Здравствуйте! Прошу Вашей помощи. Задача: Упорядочить список фамилий,...

Выдать пронумирований список студентов с указанием фамилий и задолжностей
Нужно срочно написать программу помогите плиз Студенты сдали сессию 5...

Список фамилий, разделенных запятыми, записан в строке в произвольном порядке
Список фамилий, разделенных запятыми, записан в строке в произвольном порядке....

6
КонецСвета
Почетный модератор
7929 / 3900 / 2464
Регистрация: 30.10.2011
Сообщений: 5,379
23.06.2013, 14:11 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

навскидку
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
uses crt;
var temp,pres,s: string;
    f,g: text;
    k: integer;
 
function Kr(str: string): string;
begin
if (str[length(str)]='я') or (str[length(str)]='й')
   then Kr:=copy(str,1,length(str)-2) else
        if (str[length(str)]='а')
           then Kr:=copy(str,1,length(str)-1)
                else Kr:=str;
end;
 
begin
assign(f,'D:\in.txt');
assign(g,'D:\out.txt');
reset(f); rewrite(g);
readln(f,s);
pres:=copy(s,1,pos(' ',s)-1);
k:=1;
while not (eof (f)) do
      begin
      readln(f,s);
      temp:=Kr(copy(s,1,pos(' ',s)-1));
      if copy(pres,1,length(temp))=temp then inc(k) else
         begin
         if k=1 then writeln(g,pres);
         pres:=copy(s,1,pos(' ',s));
         k:=1;
         end;
      end;
close(f);
close(g);
end.
сделано в Pabc, но думаю, пойдет и в турбо
1
WhiteNoise15
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 16
23.06.2013, 15:05  [ТС] 3
@КонецСвета, Что-то не работает
0
КонецСвета
Почетный модератор
7929 / 3900 / 2464
Регистрация: 30.10.2011
Сообщений: 5,379
23.06.2013, 15:15 4
@WhiteNoise15, в чем выражается "не работает"?
у меня работает в Pabc и в Turbo 7.0
вы не видите окна программы? это нормально: все действия производятся с файлами.
создали ли вы входной файл? он должен размещаться на диске D и называться "in.txt"
вот пример входного файла и выходного файла
0
Вложения
Тип файла: txt in.txt (398 байт, 8 просмотров)
Тип файла: txt OUT.TXT (69 байт, 4 просмотров)
WhiteNoise15
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 16
23.06.2013, 15:43  [ТС] 5
@КонецСвета, Спасибо)Я просто напутал с файлами. Только вот, я не понимаю как работает функция и цикл. Не могли бы объяснить ?
0
КонецСвета
Почетный модератор
7929 / 3900 / 2464
Регистрация: 30.10.2011
Сообщений: 5,379
23.06.2013, 15:51 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
uses crt;
var temp,pres,s: string;
    f,g: text;
    k: integer;
 
//функция служит для определения "основы" фамилии, то есть той части, которая остается неизменной независимо от пола
function Kr(str: string): string;
begin
if (str[length(str)]='я') or (str[length(str)]='й')     //проверяем первый случай - фамилия заканчивается на "ий" или "ая", в основу пойдут все буквы, кроме двух последних
   then Kr:=copy(str,1,length(str)-2) else
        if (str[length(str)]='а')                       //если фамилия заканчивается на "а" (Шаповалова), основой станет слово без последней буквы
           then Kr:=copy(str,1,length(str)-1)
                else Kr:=str;                           //в остальных случаях фамилия не меняется (Ключко - он, она, например), то есть идет в основу целиком
end;
 
begin
assign(f,'D:\in.txt');
assign(g,'D:\out.txt');
reset(f); rewrite(g);
readln(f,s);
pres:=copy(s,1,pos(' ',s)-1);                     //в переменную для хранения проверияемой фамилии помещаю фамилию (только фамилию, без инициалов) из первой строки файла
k:=1;                                             //количество найденных фамилий - 1
while not (eof (f)) do                            //пока не закончится файл
      begin
      readln(f,s);                                //считываю строку
      temp:=Kr(copy(s,1,pos(' ',s)-1));           //во временную переменную копирую фамилию из считанной строки, сразу же оставив с помощью функции от нее только основу
      if copy(pres,1,length(temp))=temp then inc(k) else    //если проверяемая фамилия совпадает с основой - значит, еще один однофамилец, просто увеличить количество найденных фамилий
         begin                                              //иначе надо
         if k=1 then writeln(g,pres);                       //если предыдущая фамилия - одна - то есть не повторяется - записать ее в файл
         pres:=copy(s,1,pos(' ',s));                        //а на место проверяемой фамилии поместить новую
         k:=1;                                             //ну и обнулить (скинуть до единицы) счетчик повторений для фамилии - она ведь новая
         end;
      end;
close(f);
close(g);
end.
0
WhiteNoise15
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 16
23.06.2013, 16:20  [ТС] 7
@КонецСвета, Огромное спасибо
0
23.06.2013, 16:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2013, 16:20

Создать текстовый файл, в котором находится список из n фамилий и оценок за экзамен
Создать текстовый файл при помощи языка Паскаль в, котором находится список из...

Вывести все слова, состоящие из неповторяющихся символов
Задача: Пусть дан текст, состоящий из слов. Под словом понимается...

Напечатать список постов с указанием фамилий дежурных, зарегистрировавших от пяти и выше ДТП
Помогите очень срочно,нужно решить и написать 2 задачи. Вот собственно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru