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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2016, 16:21   #1
Robert Goldstein
Новичок
Джуниор
 
Регистрация: 03.02.2016
Сообщений: 2
По умолчанию Не могу найти ошибку в коде, помогите разобраться

Товарищи, помогите, пожалуйста. Мне нужно, чтобы при введении 14-тистрочного стихотворения в нём выделялись слова, а затем они выводились бы на экран в порядке того, как их набирали. Ну пример для одной строки:
Пользователь воодит:
Hello, my name is Joe.
На экране он видит:
1 слово - Hello
2 слово - my
3 слово - name
4 слово - is
5 слово - Joe

И всё у меня почти получилось, но слова почему-то выводятся только с последней строки, а всех остальных нет! Я не понимаю что я делаю не так. Хотя я почти полностью уверен, что всё дело в функции, которая выделяет слова. Помогите, пожалуйста, найти ошибку!

Код:
program shakespeare;


type massiv=array [1..14] of string;
     slowa=array [1..14,1..20] of string;
     
var  A:massiv;
    L:slowa;
    
const D = ['.', ',', ':', ';', '!', '?', '-', ' '];   
    
procedure vvod(var P:massiv);
          var i       :integer;
              str     :string;
begin          
 for i:=1 to 14 do begin
 readln(str);
 P[i]:=str;
 end;
end;

function vid(X:massiv):slowa;
var i,j,k,p:byte;
    S:string;
    W:slowa;   
begin    
for i:=1 to 14 do 
   s:=X[i]; k:=1; p:=length(s);
    for j:=1 to p do
if (s[j] in ['a'..'z']) or (s[j] in ['A'..'Z']) then begin 
   W[i,k]:=W[i,k]+s[j];
   if s[j+1] in D then k:=k+1;
   end;
 vid:=W;  
end;   
   
procedure vivod(Y:slowa);
var i,j,k:integer;
    S:string;
begin   
k:=1;        
    for i:=1 to 14 do
        for j:=1 to 20 do
            if length(L[i,j])>0 then begin
            writeln(i,' слово - ',L[i,j]);
            k:=k+1;
            end;
end;            
   
begin
vvod(A);
L:=vid(A);
vivod(L);
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.




P.S. У меня pascalABC.net. И ещё: всё сделано через функции и процедуры не потому что "я могу", это просто часть моего задания.

Последний раз редактировалось Serge_Bliznykov; 03.02.2016 в 19:33.
Robert Goldstein вне форума Ответить с цитированием
Старый 03.02.2016, 19:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ошибок там много.
я поправил чуток.

получилось такое:
Код:
program shakespeare;

const NumStrok = 4;
  MaxWordCount = 30;

type massiv = array[1..NumStrok] of string;
  slowa = array[1..NumStrok, 1..MaxWordCount] of string;


const D = ['.', ',', ':', ';', '!', '?', '-', ' '];

procedure vvod(var P: massiv);
var i: integer;
  str: string;
begin
  for i := 1 to NumStrok do ReadLn(P[i]);
{ для отладки
p[1] := 'one line';
p[2] := 'second line ';
p[3] := 'line number three';
p[4] := 'last one line at debug'; }
end;

function vid(X: massiv): slowa;
var i, j, k, p: byte;
  S: string;
  W: slowa;
begin
  for i := 1 to NumStrok do
    for j := 1 to MaxWordCount do W[i,j]:='';

  for i := 1 to NumStrok do begin
     s := X[i]+' '; k := 1; ;
     for j := 1 to length(s)-1 do
       if (s[j] in ['a'..'z']) or (s[j] in ['A'..'Z']) then begin
            W[i, k] := W[i, k] + s[j];
            if s[j + 1] in D then 
              if Length(W[i,k])>0 then k := k + 1;
       end;
     end;
  vid := W;
end;

procedure vivod(Y: slowa);
var i, j, k: integer;
  S: string;
begin
  for i := 1 to NumStrok do begin
    WriteLn('_____ строка ',i);
    for j := 1 to MaxWordCount do 
      if length(Y[i, j]) > 0 then
        writeln(j, ' слово - ', Y[i, j]);
    end;    
end;

var A: massiv;
  L: slowa;

begin
  vvod(A);
  L := vid(A);
  vivod(L);
end.

только непонятно, почему бы Вам не воспользоваться возможнастью лябда выражений, которые доступны в этом вашем PascalABC.NET.
Разобрать строку на слова можно буквально одной строкой кода!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.02.2016, 20:21   #3
Robert Goldstein
Новичок
Джуниор
 
Регистрация: 03.02.2016
Сообщений: 2
По умолчанию

Спасибо огромное! Ошибки свои я осознал. Нельзя так делать, потому что я, во-первых, не умею, а во-вторых даже если бы умел, то так как это школьное задание, то и выполнять его нужно в рамках пройденного материала, иначе возникают подозрения у учителя (а не списал ли ты, дружок, часом? О_о) Спасибо ещё раз.
Robert Goldstein вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помощи(( Fransuz_F Общие вопросы Delphi 3 25.02.2014 10:24
прошу помощи! alexxxx Фриланс 1 07.06.2008 17:05