Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 12.01.2012, 17:35   #1 (permalink)
andreyss
Новичок
 
Регистрация: 12.01.2012
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Программа Pascal, разобраться в ошибках кода

не могу понять ошибки, + проблема при компиляции. Помогите плиз))
Еще посоветовали вставить функцию delimiter - не знаю зачем)

Работа со строковыми переменными:
1) вывести фразу ("Изучение алгоритма позволяет представить микропроцессорное устройство")
2) подсчитать кол-во элементов в каждом слове
3) Если во фразе «Изучение алгоритма позволяет представить микропроцессорное устройство» длина самого длинного слова кратна длине самого короткого слова, то расположить слова из фразы в обратном порядке.

Программа на Turbo Pascal:

uses crt, dos;

type
TWords = array[1 .. 50] of string;

var st1 as string;
i, cnt, cnt1, min1, max1 as integer;
wrd as TWords;

function GetWords(s: string; var words: TWords): integer;
var
i, back, n: integer;
begin
i := 1;
n := 0;
while i <= length(s) do begin
while (i <= length(s)) and (s[i] in delimiter) do inc(i);
if i <= length(s) then begin
back := i;
while (i <= length(s)) and not(s[i] in delimiter) do inc(i);
inc(n);
words[n] := copy(s, back, i - back);
end;
end;
GetWords := n;
end;


begin
st1 := 'Изучение алгоритма позволяет представить микропроцессорное устройство';
writeln(st1);

cnt := GetWords(st1, wrd);

nim1 := length(wrd[1]);
max1 := length(wrd[1]);

for i := 1 to cnt do
begin
cnt1 := length(wrd[i]);
writeln('Слово "',wrd[i],'" = ',cnt1,' букв');

if max1 < cnt1 then max := cnt1;
if min1 > cnt1 then min := cnt1;
end;

if (max1 mod min1) = 0 then
for i := cnt downto 1 do writeln(wrd[i],' ');

end.
andreyss вне форума   Ответить с цитированием

Старый 12.01.2012, 17:35
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ваш вопрос обязательно решится, а пока вы можете почитать схожие топики

Помогите разобраться
Задача на получение кода символа. Пролог

Старый 12.01.2012, 21:19   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от andreyss Посмотреть сообщение
Программа на Turbo Pascal:
Вы в этом абсолютно уверены?
Цитата:
Сообщение от andreyss Посмотреть сообщение
max1 as integer;
Видите ли, в Паскале "as" не применяется, там для этого есть двоеточие, а "as", если я не путаю, - это Visual Basic.
Кроме того, впервые встречаюсь с множеством по имени "delimiter". Во всяком случае, не попадалось таковое в составе языка Паскаль.
И вообще куча ошибок.
Вот отлаженный и работающий вариант:
Код:
type
 TWords = array[1 .. 50] of string;

var
 st1:string;
 i,j,cnt,min1,max1:integer;
 wrd:TWords;

Procedure GetWords(s: string; var words: TWords; var Nw:integer);
var
 i,back: integer;
begin
 i:=1;
 Nw:=0;
 while i<=length(s) do
  begin
   while (i<=length(s)) and (s[i]=' ') do inc(i);
   if i<=length(s) then
    begin
     back:=i;
     while (i<=length(s)) and (s[i]<>' ') do inc(i);
    end;
   inc(Nw);
   words[Nw]:=copy(s, back, i-back);
  end;
end;

BEGIN
 st1 := 'Изучение алгоритма позволяет представить микропроцессорное устройство';}
 writeln(st1);

 GetWords(st1, wrd, cnt);

 min1:=length(wrd[1]);
 max1:=length(wrd[1]);

 for i:=2 to cnt do
  begin
   if length(wrd[i])<min1 then min1:=length(wrd[i]);
   if length(wrd[i])>max1 then max1:=length(wrd[i]);
  end;

 for i:=1 to cnt do
  begin
   write(wrd[i]);
   for j:=length(wrd[i])+1 to max1 do write(' ');
   writeln(' - ',length(wrd[i]));
  end;

 if (max1 mod min1)=0 then
  for i:=cnt downto 1 do write(wrd[i],' ');

 readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Старый 13.01.2012, 18:25   #3 (permalink)
andreyss
Новичок
 
Регистрация: 12.01.2012
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо) действительно as это VB
andreyss вне форума   Ответить с цитированием
Старый 13.01.2012, 18:38   #4 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

delimiter - множество разделителей, в него включен и символ Space
AlexZir вне форума   Ответить с цитированием
Старый 13.01.2012, 19:51   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
delimiter - множество разделителей, в него включен и символ Space
Ага - только вот Паскаль про это дело не в курсе. Проверено.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 13.01.2012, 19:55   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Это касается регулярных выражений, в классическом Pascal этого нет, листинг, скорее всего, был сделан на PascalABC.Net или на Oberon-е, там есть их поддержка.
AlexZir вне форума   Ответить с цитированием
Старый 13.01.2012, 19:59   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
Это касается регулярных выражений, в классическом Pascal этого нет, листинг, скорее всего, был сделан на PascalABC.Net или на Oberon-е, там есть их поддержка.
А тогда товарищ пусть не заливает, что у него Турбо Паскаль!
Vladimir_S вне форума   Ответить с цитированием
Старый 13.01.2012, 20:06   #8 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Хотя массивы там определяются классически, а не через As

Думаю, товарищ просто надергал кусков из разных мест и сам не понял, что написал.
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
pascal, строки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 23:28.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.