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

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

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

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

Программа Pascal, разобраться в ошибках кода

andreyss

Ученик
Регистрация
12 Янв 2012
Сообщения
4
Реакции
0
Баллы
0
Программа 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 in delimiter) do inc(i);
if i <= length(s) then begin
back := i;
while (i <= length(s)) and not(s 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);
writeln('Слово "',wrd,'" = ',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,' ');

end.
 
Программа на Turbo Pascal:
Вы в этом абсолютно уверены?
Видите ли, в Паскале "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.
 
спасибо) действительно as это VB
 
delimiter - множество разделителей, в него включен и символ Space :)
 
Это касается регулярных выражений, в классическом Pascal этого нет, листинг, скорее всего, был сделан на PascalABC.Net или на Oberon-е, там есть их поддержка.
 
Это касается регулярных выражений, в классическом Pascal этого нет, листинг, скорее всего, был сделан на PascalABC.Net или на Oberon-е, там есть их поддержка.
А тогда товарищ пусть не заливает, что у него Турбо Паскаль! :D
 
Хотя массивы там определяются классически, а не через As

Думаю, товарищ просто надергал кусков из разных мест и сам не понял, что написал. :))
 
Назад
Сверху