|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 (permalink) |
Member
Регистрация: 23.05.2011
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]() Оказалось, что программа не так трудна как кажется. Задание: Напишите функцию, превращающую сокращенную запись вида a-z в строке s1 в эквивалентный полный список abcd..xyz в s2. Допускаются буквы на двух регистрах и цифры. Учесть варианты a-b-c,a-z0-9; Начальные или конечные символы "-" воспринимаются буквально. Программа: program az; var s, s1, s2:String; i:Integer; ch:Char; begin writeln ('Введите строку:'); readln (s1); s2:=s[1]; for i:=2 to length(s)-1 do begin if s[i]='' then begin for ch:=#0 to #255 do begin if s2=s1+s[i] then s1:=s2+s[i]; writeln (s2 ); end; end;end; end. Я так понимаю, что я неправильно задаю функцию. А как изменить не знаю. Помогите пожалуйста. Особенно надеюсь на Владимира : ![]() |
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ваша проблема будет решаться значительно легче, если ознакомиться с похожими темами Помогите найти ошибку в программе Задача на массивы, Pascal. Помогите найти ошибку Помогите найти ошибку Не могу найти ошибку в программе. Паскаль |
![]() |
#2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Ну, Вы знаете, увидя ТАКУЮ аттестацию своей персоны, грех не откликнуться. Но сразу предупреждаю:
1. С Паскалем ABC дела никогда не имел и не собираюсь. Так что решить попробую в обычном Borland-Turbo Паскале. Если не устраивает - сообщите сразу. 2. Скорее всего, сегодня не получится - только завтра. Да, и прошу прощения, что проигнорировал Ваше предыдущее обращение. Просто пробежав глазами текст и увидев слово "список", решил, что речь идет о динамических структурах, стеках и пр., а в этом я, увы не силен. |
![]() |
![]() |
![]() |
#3 (permalink) |
Member
Регистрация: 23.05.2011
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
Ох
Спасибо, что откликнулись (: Ну у меня тут куча друзей кидают Вам "реши да напиши" на паскале. У всех у них тоже авс. Так что в принципе пишите на чем угодно, мне лишь бы суть понять, переделать под себя всегда смогу (: Мне завтра надо сдавать готовый отчет по всем программам ![]() Я просто более чем уверена, что тут дел на 2-5 мин. Препод придрался к for ch:=#0 to #255 do begin if s2=s1+s[i] then s1:=s2+s[i]; writeln (s2 ); end; Он сказал, что на месте ch:= ... to ... do и s2:=s1+ ... надо КОЕ-ЧТО написать и будет чудо (: |
![]() |
![]() |
![]() |
#5 (permalink) |
Member
Регистрация: 23.05.2011
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
Ооох
![]() Конечно же сейчас сама посижу еще. Я не понимаю функцию (если это я вообще правильно называю) char Если можете пояснить сейчас, то... (: Если завтра ждать помощи, то во сколько? В 11-12 дня я уезжаю в универ. |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
#6 (permalink) |
Member
Регистрация: 23.05.2011
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
program az;
var s, s1, s2:String; i:Integer; ch:Char; begin writeln ('Ââåäèòå ñòðîêó:'); readln (s); s2:=s[1]; for i:=2 to length(s)-1 do begin if s[i]='-' then for ch:=chr(i) to succ(s[i]) do s2:=s1+ch else s1:=s2+s[i]; writeln (s2); end; end. У меня стало выводить точку О_О ура ![]() |
![]() |
![]() |
![]() |
#7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
А потестируйте:
Код:
program az; var s1,s2:String; s:Array[1..255] of Char; i,i1,i2,j,N:Byte; ch:Char; BEGIN writeln ('Введите строку:'); readln(s1); N:=0; i:=0; i1:=0; i2:=0; Repeat Inc(i); If (i>1) and (s1[i-1]<>'-') and (s1[i]='-') then i1:=Ord(s1[i-1]); If (i>1) and (s1[i-1]='-') and (s1[i]<>'-') then i2:=Ord(s1[i]); If (i1>0) and (i2>0) then begin for j:=i1 to i2 do s[N+j+1-i1]:=Chr(j); Inc(N,(i2-i1+1)); i1:=0; i2:=0; end; Until i=Length(s1); s2:=s; Writeln(s2); Readln; END. |
![]() |
![]() |
![]() |
#8 (permalink) |
Member
Регистрация: 23.05.2011
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
Во-первых, Владимир, хочу сказать большое спасибо, что все-таки отозвались и потратили на меня свое время.
Во-вторых, программа выдает много ошибок о неправильном присвоении типов. Я пыталась изменить. Но в любом случае Ваш вариант слишком сложен для меня. ( в плане сложности решения) Я видать эту тему проболела. Поэтому признаюсь честно, что не понимаю. Мало ли кому пригодится, потом кину сюда конечную программу. Еще раз спасибо, прям правда очень приятно, что уделили мне время (: |
![]() |
![]() |
![]() |
#9 (permalink) | |||||||
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]() Цитата:
Цитата:
А всё-таки - в каком конкретно месте ругается? Цитата:
1. Вводится строка вида А-В, где под А и В понимаются не собственно буквы, а некие символы, например С-М или 3-7. Пока ограничимся рассмотрением простейшей цепочки. 2. Осуществляется посимвольный перебор введенной строки s1. Если встречается комбинация вида "А-", то есть i-тый сивол есть "-", а предыдущий таковым не является, то переменной i1 присваивается значение кода символа А из кодовой таблицы. Если комбинация "-В", то переменной i2 присваивается значение кода символа В. Таким образом, если как i1, так и i2 оказываются ненулевыми, то это значит, что обработана последовательность вида А-В. 3. В символьный массив s заносится цепочка символов, коды которых лежат в интервале от кода А до кода В, включая сами А и В. Длина цепочки N увеличивается на количество введенных в массив символов. 4. Строковой переменной s2 присваивается значение массива s. Вот тут, как я подозреваю, транслятор и может "взбрыкнуть". Если так, то замените строку s2:=s; строками s2:=''; For i:=1 to N do s2:=s2+s[i]; Это должно пройти полюбому. Программа обрабатывает и более сложные исходные строки, как и велено. По тому же алгоритму. Цитата:
Цитата:
Цитата:
Цитата:
|
|||||||
![]() |
![]() |
![]() |
#10 (permalink) |
Member
Регистрация: 23.05.2011
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
Не ожидала, что Вы ответите в 8 утра!
![]() И очень обидно, что не прочитала Ваши пояснения. То, что мне и нужно было. program az; var s, s2:String; i:Integer; ch:Char; begin writeln ('введите строку:'); readln (s); s2:=s[1]; for i:=2 to length(s)-1 do if s[i]='-' then for ch:=succ(S[i-1]) to pred(S[i+1]) do s2:=s2+ch else s:=s2; s2:=s2+S[i+1]; writeln (s2); end. Вот программа, полностью соответствует Вашим объяснениям, но без массива. Надеюсь кому-нибудь пригодится. ![]() |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|