• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

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

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите исправить задачу

Лена12

Ученик
Регистрация
20 Ноя 2017
Сообщения
8
Реакции
0
Баллы
0
Помогите исправить задачу

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

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