Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 26.11.2017, 19:54   #1 (permalink)
Лена12
Новичок
 
Регистрация: 20.11.2017
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите исправить задачу

В условии сказано: Составьте программу, позволяющую определить, есть ли в школе в 8-х классах однофамильцы. Данные об учениках должны идти в следующем порядке: имя, фамилия, год обучения, буква.
Когда вводишь например фамилию Иванов в 8 класс и в 9 классе, на выходе выдает, что есть однофамильцы... и Например еще когда вводишь Иванов 8 класс и Иванова 8 класс, пишет что нет однофамильцев. Язык программирования Pascal. Помогите исправить задачку, на обработку записей.
Код:
  program z6;
  
  type
  cl = record
  name: string[20];
      familia: string[45];
      year: integer;
      bukva: string;
    end;
  
  var
  kl: array [1..100] of cl;
  i, n, c: integer;
  
  begin
  Write('Введите количество учеников= ');
  readln(n);
    for i := 1 to n do
  begin
  writeln('Введите сведения о ', I, '-м ученике:');
  write('Имя ');
      readln(kl[I].name);
      write('Фамилия ');
      readln(kl[I].familia);
      write('Класс ');
      readln(kl[I].year);
      write('Буква ');
      readln(kl[I].bukva);
    end;
    writeln; 
    c := 0;
    for i := 1 to n - 1 do 
    begin
      if ((kl[I].year = 8) and (kl[I].familia = kl[I + 1].familia)) then inc(c); 
    end;
    if c >= 1 then writeln('Однофамильцыесть') else write('Однофамильцевнет'); 
  end.
Лена12 вне форума   Ответить с цитированием

Старый 26.11.2017, 19:54
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вашего прочтения ждут аналогичные топики

Помогите, пожалуйста, исправить задачу
Помогите пожалуйста исправить задачу в Ассемблере
Помогите исправить код
Помогите пожалуйста исправить задачу на строки, Паскаль
Помогите исправить задачу! Матрицы.

Старый 26.11.2017, 20:08   #2 (permalink)
prima
Member
 
Регистрация: 31.08.2015
Сообщений: 14,064
Сказал(а) спасибо: 176
Поблагодарили 140 раз(а) в 61 сообщениях
Репутация: 48833
По умолчанию

А почему вы сравниваете только две соседних записи?
I-тую и I+1-ую?
И можно уточнить диалект языка?
__________________
Пожалуйста не предлагайте мне дружбу. Не хочу отказывать, но у меня другие понятия, поэтому просто не отвечу.
prima вне форума   Ответить с цитированием
Старый 26.11.2017, 20:31   #3 (permalink)
Лена12
Новичок
 
Регистрация: 20.11.2017
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Pascal ABC
Лена12 вне форума   Ответить с цитированием
Старый 26.11.2017, 20:54   #4 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,304
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от prima Посмотреть сообщение
И можно уточнить диалект языка?
Андрей, да не важно. Скорее всего, ненавистный мне АВС.
Цитата:
Сообщение от prima Посмотреть сообщение
А почему вы сравниваете только две соседних записи? I-тую и I+1-ую?
Причем абсолютно неправильно.
Лена, значит, так.
1. Смысл поля Letter я, извините, не понял. Вас интересуют однофамильцы или ученики, фамилии которых начинаются на одну и ту же букву?
2. С разнополыми однофамильцами (если иметь в виду русский язык, а не, скажем, английский) — сложно. Предлагаемая ниже программка сработает для фамилий типа Петренко, Кацман, Черемных, Ревич, а вот для "Иванов" и "Иванова", "Савицкий" и "Савицкая" увы, нет, только для однополых. Научить её такому можно, но очень трудно: нужно перебрать все варианты окончания фамилий и т.д.
3. В программе сообщения замены английскими потому, что мне так удобнее (связано с кодировками кириллицы). Не принципиально, можете заменить обратно.
Код:
type
 cl = record
       name: string[20];
       familia: string[45];
       year: integer;
      end;

var
 kl: array [1..100] of cl;
 i,j,n: integer;
 b:boolean;

begin
 Write('Enter the number of pupils ');
 readln(n);
 for i := 1 to n do
  begin
   writeln('Enter the data for ', i, '-th pupil:');
   write('Name: ');
   readln(kl[i].name);
   write('Surname: ');
   readln(kl[i].familia);
   write('Year: ');
   readln(kl[i].year);
  end;
  writeln;
  b:=false;
  for i:=1 to n-1 do
   for j:=i+1 to n do
    if (kl[i].year=8) and (kl[j].year=8) and (kl[i].familia=kl[j].familia) then b:=true;
  if b then writeln('Namesakes present') else write('No namesakes');
 Readln
end.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 26.11.2017, 20:56   #5 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,304
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от Лена12 Посмотреть сообщение
Pascal ABC
Ну вот, как я и думал.
Можете последний Readln выкинуть. Мне в моём Free Pascal он нужен для останова.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 26.11.2017, 21:21   #6 (permalink)
prima
Member
 
Регистрация: 31.08.2015
Сообщений: 14,064
Сказал(а) спасибо: 176
Поблагодарили 140 раз(а) в 61 сообщениях
Репутация: 48833
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Андрей, да не важно.
Смутно помню грабли с разной работой этого цикла в разных компиляторах.
Хотя возможно это у меня блуждающие токи от ЕС-1035, там были два компилятора Паскаля с очень разным программированием, приходилось их автоматически различать средствами REXX
__________________
Пожалуйста не предлагайте мне дружбу. Не хочу отказывать, но у меня другие понятия, поэтому просто не отвечу.
prima вне форума   Ответить с цитированием
Старый 27.11.2017, 15:49   #7 (permalink)
Лена12
Новичок
 
Регистрация: 20.11.2017
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Скажите, пожалуйста что перебирать j- элементом?
Лена12 вне форума   Ответить с цитированием
Старый 27.11.2017, 16:14   #8 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,304
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от Лена12 Посмотреть сообщение
Скажите, пожалуйста что перебирать j- элементом?
Да всё то же — фамилии.
Допустим, количество учеников в восьмых классах — 10.
Цикл работает следующим образом.
Берём первого (i=1). Пусть его фамилия Глушко.
Начинаем перебирать ОСТАЛЬНЫХ со 2 по 10, т.е. j=2, 3, 4 и т.д. до 10. Если мы снова увидим фамилию Глушко, например, у четвёртого, то фамилия[1]=фамилия[4], и мы нашли однофамильца!
Потом берём второго ученика (i=2), пусть его фамилия — Иванов. Перебираем по j остальных с 3 по 10 и ищем фамилию Иванов (с "Иванова", увы, не сработает: отбор однофамильцев с фамилиями на -ов, -ин, -ский, -цкий, -цкой осуществляется только среди однополых). И т.д.
Вот так.
Если всё-таки нужно, чтобы срабатывало по разнополым, напишите, подумаем. Но это очень непросто.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:38.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.