|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
12.01.2012, 17:35 | #1 (permalink) |
Новичок
Регистрация: 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. |
12.01.2012, 17:35 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ваш вопрос обязательно решится, а пока вы можете почитать схожие топики Помогите разобраться Задача на получение кода символа. Пролог |
12.01.2012, 21:19 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Вы в этом абсолютно уверены?Видите ли, в Паскале "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. |
13.01.2012, 19:51 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
13.01.2012, 19:55 | #6 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Это касается регулярных выражений, в классическом Pascal этого нет, листинг, скорее всего, был сделан на PascalABC.Net или на Oberon-е, там есть их поддержка.
|
13.01.2012, 20:06 | #8 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Хотя массивы там определяются классически, а не через As
Думаю, товарищ просто надергал кусков из разных мест и сам не понял, что написал. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
pascal, строки |
Опции темы | |
Опции просмотра | |
|
|