Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
P-980
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 50
1

Упростить код, если возможно

08.03.2016, 15:32. Просмотров 925. Ответов 8
Метки нет (Все метки)

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

Требуется написать программу, которая формирует и печатает уникальный логин для каждого ученика по следующему правилу: если фамилия встречается первый раз, то логин – это данная фамилия, если фамилия встречается второй раз, то логин – это фамилия, в конец которой приписывается число 2 и т.д. Например, для входной последовательности
Иванова Мария
Петров Сергей
Бойцова Екатерина
Петров Иван
Иванова Наташа

будут сформированы следующие логины:
Иванова
Петров
Бойцова
Петров2
Иванова2

------------
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type
People = record
Fam: string; 
nom: integer;
end;
 
begin
var n := 5;
var a: array of People := new People[n];
for var i := 0 to a.Length - 1 do
begin
var s := readlnstring;
a[i].Fam := s.Split(' ')[0];
for var j := 0 to i do
if a[i].Fam = a[j].Fam then a[i].nom += 1;
end;
for var i := 0 to a.Length - 1 do
if a[i].nom = 1 then writeln(a[i].Fam) else
writeln(a[i].Fam + IntToStr(a[i].nom));
end.
Упростить: чтобы не было a.Length - 1, IntToStr, s.Split. Так как не проходили.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2016, 15:32
Ответы с готовыми решениями:

Определить, возможно ли строку преобразовать в число, и, если возможно, то в какое, целое или вещественное
Дана строка. Если она представляет собой запись целого числа, то вывести 1,...

Подскажите, как упростить код
Доброго времени суток! Собственно кодить только начинаю, родные по такому...

Упростить код. Побитовое сравнение 2 чисел
Доброго времени суток. Ув. программисты, помогите упростить данный код, но без...

Упростить код построения прямоугольника по координатам
Написал программу, которая чертит прямоугольник по заданным координатам, если...

Можно ли упростить код сортировок в Windows Forms?
{$reference System.Windows.Forms.dll} {$reference System.Drawing.dll} uses...

8
vlisp
468 / 436 / 105
Регистрация: 10.08.2015
Сообщений: 1,482
Завершенные тесты: 1
08.03.2016, 18:04 2
Лучший ответ Сообщение было отмечено P-980 как решение

Решение

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
type
  People = record
    Fam: string; 
    nom: integer;
  end;
 
begin
  var n := 5;
  var a: array of People := new People[n];
  
  for var i := 0 to n - 1 do
  begin
  
    a[i].Fam := readlnstring;
 
    for var j := 0 to i do
      if a[i].Fam = a[j].Fam then
        a[i].nom += 1;
  end;
 
  for var i := 0 to n - 1 do
    if a[i].nom = 1 then writeln(a[i].Fam) else
     begin
       write(a[i].Fam);
       writeln(a[i].nom);
     end
end.
1
P-980
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 50
09.03.2016, 16:24  [ТС] 3
ещё такой вопрос что делает "readlnstring"&
0
vlisp
468 / 436 / 105
Регистрация: 10.08.2015
Сообщений: 1,482
Завершенные тесты: 1
09.03.2016, 17:18 4
Цитата Сообщение от P-980 Посмотреть сообщение
ещё такой вопрос что делает "readlnstring"&
Запрашивает у пользователя строку, это обертка над функцией Read, как я понял
0
P-980
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 50
11.03.2016, 15:17  [ТС] 5
Извини, но код не рабочий. Он работает, но выдаёт то, что я и ввёл.
0
vlisp
468 / 436 / 105
Регистрация: 10.08.2015
Сообщений: 1,482
Завершенные тесты: 1
12.03.2016, 19:36 6
Цитата Сообщение от P-980 Посмотреть сообщение
Извини, но код не рабочий. Он работает, но выдаёт то, что я и ввёл.
Это пустословие, я с таким же успехом могу сказать, что он рабочий... и даже объяснить почему
0
P-980
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 50
13.03.2016, 17:30  [ТС] 7
Он рабочий, но выдает не правильное решение.
я ввожу: Иванова Мария
Петров Сергей
Бойцова Екатерина
Петров Иван
Иванова Наташа
Должно выводится: Иванова
Петров
Бойцова
Петров2
Иванова2.
А выводится то, что я ввёл.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26101 / 17501 / 6943
Регистрация: 22.10.2011
Сообщений: 30,823
Записей в блоге: 6
13.03.2016, 18:24 8
Лучший ответ Сообщение было отмечено P-980 как решение

Решение

P-980, замени 14-ю строку кода, приведенного выше, на такие две:
Pascal
14
15
    a[i].Fam := readlnstring;
    a[i].Fam := Copy(a[i].Fam, 1, Pos(' ', a[i].Fam) - 1);
- будет выдавать то, что нужно.
1
vlisp
468 / 436 / 105
Регистрация: 10.08.2015
Сообщений: 1,482
Завершенные тесты: 1
14.03.2016, 23:55 9
Цитата Сообщение от P-980 Посмотреть сообщение
Он рабочий, но выдает не правильное решение.
А вводить имя в программу, которая его обрезает - правильное решение?
0
14.03.2016, 23:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2016, 23:55

Упростить код нахождения количества и суммы делителей заданного числа
как можно упростить етот код до уровня школьника? var n,k,s,i:word; begin ...

Если изучить Delphi, то возможно ли, разрабатывать программы на Pascal?
Если изучить Delphi, то возможно ли, разрабатывать программы на Pascal? В...

Если возможно построить тупоугольный треугольник - вычислить его площадь
Введите три числа. Если они могут быть длинами сторон разностороннего...


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

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

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