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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2009, 00:26   #1
Hikari
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 13
По умолчанию задание на строки

Здравствуйте!
Помогите, пожалуйста, исправить ошибку в коде, составленном для такой задачи на Паскале:

Ввести предложение, слова в котором разделены пробелам и запятыми. Распечатать это предложение, удалив из него те, которые встретились там более одного раза.

вот код:

Код:
program stroki;
uses crt;
type mas_slov:array[1..50] of string;
var 
  str_in, str_out:string;
  slova:mas_slov;
  i:integer;
  kol_slov:integer;

procedure init(str_in:string; var massiv:mas_slov);
var 
  i:integer;
  count:integer;
begin
 count:=1;
 fot i:=to length(str_in) do
  if str_in <> ' ' then  
     massiv[count]:=massiv[count] + str_in[i]
    else  
     begin
       count:=count + 1;
       massiv[count]:=' ';
  
     end;
end;


procedure new_text(massiv:mas_slov; count:integer);
var 
  i:integer;
  new_mas:mas_slov;
  srav_slovo:string;

begin
 new_mas[1]:=' ';
 srav_slovo:=massiv[1];
 for i:=1 to count do
  if massiv[i] <> srav_slovo then
    begin
     srav_slovo:=massiv[i+1];
     new_mas[i]:=new_mas[i] + massiv[i];
    end;
 str_out:=new_mas[i];
 write(str_out)                 
end;

Begin
 clrscr;
 writeln('Введите текст: ');
 readln(str_in);
 init(str_in,slova);
 writeln('Текст после обработки: ');
 new_text(slova,kol_slov);
 readkey;
End.
компилятор выдает ошибку "Переполнение стека".

заранее ОГРОМНОЕ СПАСИБО!

Последний раз редактировалось Stilet; 28.10.2009 в 09:11.
Hikari вне форума Ответить с цитированием
Старый 28.10.2009, 09:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
компилятор выдает ошибку "Переполнение стека".
На какой строке зацикливается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2009, 09:14   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
fot i:=to length(str_in) do
Как он у тебя вообще работает с такой строкой? Это важно, если правильно не напишешь от чего начинается i дальнейшую работу алгоритма можно трактовать по-разному.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.10.2009, 10:20   #4
Hikari
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 13
По умолчанию

при копировании 1 пропала... а так после ввода на экран строки программа выкидывает и курсор мигает на begin на входе в саму программу.

прошу прощения, на begin в процедуре new_text

Последний раз редактировалось Stilet; 28.10.2009 в 13:15.
Hikari вне форума Ответить с цитированием
Старый 28.10.2009, 10:34   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Чему у тебя равен kol_slov в момент старта программы?
То есть, ты запускаешь прогу и доходишь до строки
Код:
new_text(slova,kol_slov);
и ?
И еще, представь, что я ввел пустую строку, чего будет делать твой алгоритм тогда?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.10.2009, 11:02   #6
Hikari
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 13
По умолчанию

но если в процедуре init ввести в качестве формальной переменной var count:integer компилятор выдает ошибку duplicate identification
Hikari вне форума Ответить с цитированием
Старый 28.10.2009, 12:50   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Hikari Посмотреть сообщение
но если в процедуре init ввести в качестве формальной переменной var count:integer компилятор выдает ошибку duplicate identification
Внимательно прочти пост #6 и попытайся ответить на его вопросы.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 28.10.2009, 22:04   #8
Hikari
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 13
По умолчанию

возможен ли другой, более рациональный, алгоритм для решения этой задачи?
Hikari вне форума Ответить с цитированием
Старый 29.10.2009, 08:09   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Я бы поступил бы аналогично - внес бы слова из предложения в массив, а затем отсортировал бы его. Тогда надо будет сравнивать только смежные слова.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание Олфелия Помощь студентам 6 08.10.2009 16:59
Задание / Си Drozvd Помощь студентам 6 11.08.2009 06:33
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
Строки. Как вывести часть строки? Anfall Общие вопросы Delphi 7 26.02.2009 09:10
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27