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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 17:15   #1
weech
Пользователь
 
Аватар для weech
 
Регистрация: 16.11.2011
Сообщений: 91
По умолчанию Проблема с алгоритмом инкрементации элементов массива

Код:
program q;
uses crt;
type
DB = record
name:string[20];
count:integer;
check:boolean;
end;
var
i,n,j:integer;
s:string;
a:array [1..100] of DB;
begin
clrscr;
writeln('Введите N: ');
readln(n);
for i:=1 to n do
    begin
    readln(s);
    Delete(s,Pos(' ',s),16);
    a[i].name:=s;

       for j:=1 to i-1 do
            if (a[i].name=a[j].name) and (not a[j].check) then
               begin
               inc(a[i].count);
               a[j].check:=true;
               end;
    end;
for i:=1 to n do
    begin
    if a[i].count>1 then
    writeln(a[i].name + IntToStr(a[i].count))
    else writeln(a[i].name);
end;
end.
Поиск по форму ничего не дал.
Проблема, видимо, в выделенном участке кода, запарился уже переписывать, подскажите, кто может.

Пардон, забыл задачу:


4) На вход программы подаются фамилии и имена учеников. Известно, что общее количество учеников не превосходит 100. В первой строке вводится количество учеников, принимавших участие в соревнованиях, N. Далее следуют N строк, имеющих следующий формат:
<Фамилия> <Имя>
Здесь <Фамилия> – строка, состоящая не более чем из 20 символов; <Имя> – строка, состоящая не более чем из 15 символов. При этом <Фамилия> и <Имя> разделены одним пробелом. Примеры входных строк:
Иванова Мария
Петров Сергей
Требуется написать программу, которая формирует и печатает уникальный логин для каждого ученика по следующему правилу: если фамилия встречается первый раз, то логин – это данная фамилия, если фамилия встречается второй раз, то логин – это фамилия, в конец которой приписывается число 2 и т.д. Например, для входной последовательности
Иванова Мария
Петров Сергей
Бойцова Екатерина
Петров Иван
Иванова Наташа
будут сформированы следующие логины:
Иванова
Петров
Бойцова
Петров2
Иванова2

Последний раз редактировалось weech; 11.03.2012 в 17:26.
weech вне форума Ответить с цитированием
Старый 11.03.2012, 17:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Задача то какая?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.03.2012, 18:06   #3
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Хм... Ну чтож.
Для начала советую заполнять запись и только потом уже производить над ней действия, иначе можно запутаться.
Во вторых, я вообще не понял что ты хотел сделать процедурой делит (я как понимаю это были позывы на выделение из строки фамилии).
И в третьих я вообще не понял назначение твоей переменной логич. типа, можно обойтись и вовсе без нее.
И не забывай, что по умолчанию переменной присваивается значение 0.
Вот, подправил код:
Код:
program q;
uses crt;
type
DB = record
name:string[20];
count:integer;
end;
var
i,n,j:integer;
s:string;
a:array [1..100] of DB;
begin
clrscr;
writeln('Введите N: ');
readln(n);
for i:=1 to n do
    begin
    readln(s);
    delete(s,1,pos(' ',s));
    a[i].name:=s;
    a[i].count:=1;
    end;
       for I:=1 to n-1 do
       for j:=i+1 to n   do
            if (a[i].name=a[j].name)  then
               begin
               inc(a[j].count);
               end;
for i:=1 to n do
    begin
    if a[i].count>1 then
    writeln(a[i].name,(a[i].count))
    else writeln(a[i].name);
end;
end.

Последний раз редактировалось Базиля; 11.03.2012 в 18:09.
Базиля вне форума Ответить с цитированием
Старый 11.03.2012, 18:43   #4
weech
Пользователь
 
Аватар для weech
 
Регистрация: 16.11.2011
Сообщений: 91
По умолчанию

2Базилия
Ну это были не позывы, а выделение, хоть и нестандартное и, пожалуй, не самое рациональное.
Вот насчет переменной лог типа - это да, это позывы; я ввел ее, чтобы во вложенном цикле не считать несколько раз уже встретившуюся фамилию.
Кстати, код все равно не рабочий: как выводил просто фамилии, так и выводит
weech вне форума Ответить с цитированием
Старый 11.03.2012, 18:52   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
Кстати, код все равно не рабочий: как выводил просто фамилии, так и выводит
........



P.S. А, вам требуется формат ввода <Фамилия> <Имя>. Ну я уж думаю вы здесь сами справитесь. Процедуру делит подправьте и будет вам счастье.

Последний раз редактировалось Базиля; 11.03.2012 в 19:06.
Базиля вне форума Ответить с цитированием
Старый 11.03.2012, 19:03   #6
weech
Пользователь
 
Аватар для weech
 
Регистрация: 16.11.2011
Сообщений: 91
По умолчанию

Все-все, а я вводил в другом порядке. Спасибо за помощь.
weech вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с алгоритмом... Petrum Общие вопросы C/C++ 4 23.11.2011 22:14
проблема с алгоритмом hunter03 Помощь студентам 2 30.10.2011 11:26
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
Вставка элементов в массив (помогите с алгоритмом) Mclaren Помощь студентам 1 10.11.2009 17:21