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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2018, 17:46   #1
Wiserax
Новичок
Джуниор
 
Регистрация: 14.10.2018
Сообщений: 2
По умолчанию Pascal: Двумерный текстовый массив, первый курс

Задание
Дан список группы в 10 человек в виде
ФАМИЛИЯ ИМЯ ОТЧЕСТВО
20 символов 10 симв. 15 симв. Данные в одной строке отделяются друг от друга пробелами. Определить число встречающихся имен и напечатать в виде: Сергей - 2 Петр - 1 и т.д.


выполнить с использованием: 1.Двумерных символьных массивов, текстовых файлов и без процедур;


Корпел долго над кодом,
Идея такая:
Создать уникальный список имён ,в который будут записываться только не встречающиеся ранее имена. В случае повтора , имя не записывать, а добавлять к счётчику +1 . В итоге все равно как горох о стену, не хочет мой золотой код записывать в массив ничего, помогите найти ошибку пожалуйста...


Вот мой код

Код:
type
 t1 = array[1..10, 1..47] of char;
 const
 N = 10;
var
  name: array [1..10,1..10] of char;
  cnt: array [1..10] of byte;
  i, j, g, count, p,p1,s: integer;
  f,t: text;
  a: t1;
  cont,cont1,stop,stop1: boolean;
begin
  
  assign(f, '1.inp');
  reset(f);
  assign(t, '2.out'); 
  rewrite(t);

  for i := 1 to 10 do
  cnt[i] := 0;
  
  for i:= 1 to 10 do
    for j:= 1 to 10 do
      name[i,j]:= ' ';
      

 for i := 1 to 10 do 
  begin
    for j := 1 to 47 do 
    begin
      read(f, a[i, j]);
      write(t,a[i, j]); 
    end; readln(f); writeln(t,'');
  end;
  close(f);
  
  
      for j:= 1 to 10 do
      name[1,j]:= a[1,20+j];
      
  count:= 0;
  cont:= false;
  j := 21;
  p1 := 21;
   for i := 2 to 10 do
     begin
        while (j > 20) and (j < 31) do
           begin 
              if name[1,j-20] = a[i,j] then         
               begin
                  cont:= true;
                  j := j + 1;
               end
              else
                begin
                cont1:= false;
                cont:= false;
                  for p:=1 to 10 do
                  begin
                  stop:= false;
                     while (p1>20) and (p1<31) do
                       begin
                         if stop=true then
                         break;
                           if a[i,p1] = name[p,p1-20] then
                             begin
                               p1:= p1+1;
                               cont1:= false;
                             end
                           else
                             begin
                               cont1:= true;
                               p1:= p1+1;
                               stop:= true;
                             end;
                        end;
                 end;
             if cont1= true then
               begin
               for s:= 1 to 10 do
               name[2,s]:= a[2,s+10];
               end;
               break;
               end;
           end;
       if cont = true then       
         cnt[1]:= cnt[1] + 1;     
    end;          
              
              
              
              
              
              
  writeln(t, name,cnt);
  close(t);
end.
Пожалуйста, оформляйте Ваш код согласно правилам.

А вот то что он выводит:


Цитата:
Ivanov Sergey Valeriyech-chan
Segeev Alex Valeriyech-chan
Churikov Jack Valeriyech-chan
Karpenko Alex Valeriyech-chan
Lazarev Jack Valeriyech-chan
Vasiliev Summer Valeriyech-chan
Halarie Garik Valeriyech-chan
Kasima Timurka Valeriyech-chan
Ivanov Sergey Valeriyech-chan
Septikay Jack Valeriyech-chan
2
2
2
2
2
2
2
2
2
[[S,e,r,g,e,y, , , , ],[ , , , , , , , , , ],[ , , , , , , , , , ],[ , , , , , , , , , ],[ , , , , , , , , , ],[ , , , , , , , , , ],[ , , , , , , , , , ],[ , , , , , , , , , ],[ , , , , , , , , , ],[ , , , , , , , , , ]][2,0,0,0,0,0,0,0,0,0]

P.S. не обращайте внимание на двойки в output, пытался проверить где косяк

Последний раз редактировалось Вадим Мошев; 14.10.2018 в 17:51.
Wiserax вне форума Ответить с цитированием
Старый 14.10.2018, 18:33   #2
Wiserax
Новичок
Джуниор
 
Регистрация: 14.10.2018
Сообщений: 2
По умолчанию

P.S.2
Исправил ту страхолюдину на вот это, но до сих пор не записывает в name


Цитата:
for j:= 1 to 10 do
name[1,j]:= a[1,20+j];


count:=2;
k:= 2;
for i:=1 to 10 do begin
flag:= true;
for g:=1 to k do
for s:=1 to 10 do
if name[g,s] = a[i,s+21] then
flag:= false;
if flag = true then begin
for s:=1 to 10 do
name[k,s]:= a[i,20+s];
k:= k+1;
end;
end;


writeln(t,k,count, name);
close(t);
end.
Wiserax вне форума Ответить с цитированием
Старый 15.10.2018, 10:26   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
for i:=1 to 10 do begin // проверим каждое "новое" имя
  flag:= true;// признак что НЕТ такого имени
  for g:=1 to k do // проверим КАЖДОЕ(из ранее введенных) имя
    for s:=1 to 10 do // проверим(сравним) КАЖДУЮ букву букву в имени
      if name[g,s] = a[i,s+21] then  // если ХОТЯ бы раз (ОДНА БУКВА) в имени СОВПАЛА
        flag:= false; //ТО считаем что имя ЕСТЬ
      
  if flag = true then begin //если НЕТ имени то
    for s:=1 to 10 do // ВСЕМ имеющимся(возможным ?) в формируемом списке
      name[k,s]:= a[i,20+s]; //ЗАДАТЬ новое(текущее) значение
    k:= k+1;
  end;
end;
Код:
a[i,s+21] // ТАК сравниваем
a[i,20+s]; // а ТАК заносим новое имя

Sergey ....
 Sergey ....
P.S. проверять надо не только конечные результаты, но ПРОЦЕСС их получения.
-- изменения результатов на КАЖДОЙ итерации цикла(-ов)
-- ИЗМЕНЕНИЯ ВСЕХ переменных влияющих на формирование конечного результата (flag)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 15.10.2018 в 10:30.
evg_m на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первый курс/Assembler/Деление a.tereshhuk Помощь студентам 3 18.10.2014 22:32
Три задачи С++, первый курс Андрей! Помощь студентам 1 09.11.2011 20:10
первый курс. условие неправильно работает Котик Общие вопросы C/C++ 15 28.11.2009 00:56
Програмка на Паскале и С++ (лабораторка, первый курс) psihadelic Помощь студентам 7 17.11.2009 16:31
Задачи по паскалю за первый курс! Psayker Помощь студентам 3 11.06.2009 11:24