26.11.2017, 19:54 | #1 (permalink) |
Новичок
Регистрация: 20.11.2017
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите исправить задачу
Когда вводишь например фамилию Иванов в 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. |
26.11.2017, 19:54 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Вашего прочтения ждут аналогичные топики Помогите, пожалуйста, исправить задачу Помогите пожалуйста исправить задачу в Ассемблере Помогите исправить код Помогите пожалуйста исправить задачу на строки, Паскаль Помогите исправить задачу! Матрицы. |
26.11.2017, 20:08 | #2 (permalink) |
Member
Регистрация: 31.08.2015
Сообщений: 19,429
Сказал(а) спасибо: 283
Поблагодарили 213 раз(а) в 96 сообщениях
Репутация: 80884
|
А почему вы сравниваете только две соседних записи?
I-тую и I+1-ую? И можно уточнить диалект языка?
__________________
Пожалуйста не предлагайте мне дружбу. Не хочу отказывать, но у меня другие понятия, поэтому просто не отвечу. |
26.11.2017, 20:54 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Андрей, да не важно. Скорее всего, ненавистный мне АВС.Причем абсолютно неправильно.
Лена, значит, так. 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. |
26.11.2017, 20:56 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
26.11.2017, 21:21 | #6 (permalink) |
Member
Регистрация: 31.08.2015
Сообщений: 19,429
Сказал(а) спасибо: 283
Поблагодарили 213 раз(а) в 96 сообщениях
Репутация: 80884
|
Смутно помню грабли с разной работой этого цикла в разных компиляторах.
Хотя возможно это у меня блуждающие токи от ЕС-1035, там были два компилятора Паскаля с очень разным программированием, приходилось их автоматически различать средствами REXX
__________________
Пожалуйста не предлагайте мне дружбу. Не хочу отказывать, но у меня другие понятия, поэтому просто не отвечу. |
27.11.2017, 16:14 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да всё то же — фамилии.
Допустим, количество учеников в восьмых классах — 10. Цикл работает следующим образом. Берём первого (i=1). Пусть его фамилия Глушко. Начинаем перебирать ОСТАЛЬНЫХ со 2 по 10, т.е. j=2, 3, 4 и т.д. до 10. Если мы снова увидим фамилию Глушко, например, у четвёртого, то фамилия[1]=фамилия[4], и мы нашли однофамильца! Потом берём второго ученика (i=2), пусть его фамилия — Иванов. Перебираем по j остальных с 3 по 10 и ищем фамилию Иванов (с "Иванова", увы, не сработает: отбор однофамильцев с фамилиями на -ов, -ин, -ский, -цкий, -цкой осуществляется только среди однополых). И т.д. Вот так. Если всё-таки нужно, чтобы срабатывало по разнополым, напишите, подумаем. Но это очень непросто. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|