07.05.2014, 20:48 | #41 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Код:
Const Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р']; Var S:String; C:Char; i,j,k,N:integer; Found:Set of char; Codes:Array[1..10] of Byte; p:boolean; Begin p:=true; while p=true do begin Writeln('Введите строку:'); Readln(S); if length(s) = 0 then writeln('Пустая строка, введите еще раз!') else begin p:=false; end; end; Writeln; Found:=[]; N:=1; i:=1; while (i<>length(s)-1) do If (S[i] in Sonants) and not (S[i] in Found) then begin C:=S[i]; k:=i; while (S[k]<>',') or (k<>Length(S)) do begin k:=k+1; end; if S[k]=',' then begin while (S[k]<>C) or (k<>Length(S)) do k:=k+1; end; if S[k]=C then begin Found:=Found+[C]; N:=N+1; Codes[N]:=Ord(C); end; i:=i+1; end; for i:=1 to N-1 do for j:=1 to N-i do if Codes[j]>Codes[j+1] then begin k:=Codes[j]; Codes[j]:=Codes[j+1]; Codes[j+1]:=k; end; writeln('Результат:'); for i:=1 to N do write(Chr(Codes[i]),' '); if N=0 then writeln('таких согласных нет'); Readln; End. |
08.05.2014, 09:43 | #42 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И не будет работать, ибо если Вы переходите от постусловия к предусловию, то:
1. Сами условия меняются на обратные. 2. Логические связки тоже меняются на обратные, т.е. and на or и наоборот. 3. Если надо, корректируем счетчики цикла (у Вас вроде сделано). |
08.05.2014, 11:18 | #43 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Так, я правильно понял что условия меняются на противоположные только в while? а в if остаются прежними, знаки поменял на противоположные но увы.
Код:
Const Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р']; Var S:String; C:Char; i,j,k,N:integer; Found:Set of char; Codes:Array[1..10] of Byte; p:boolean; Begin p:=true; while p=true do begin Writeln('Введите строку:'); Readln(S); if length(s) = 0 then writeln('Пустая строка, введите еще раз!') else begin p:=false; end; end; Writeln; Found:=[]; N:=1; i:=1; while (i<>length(s)-1) do If (S[i] in Sonants) and not (S[i] in Found) then begin C:=S[i]; k:=i; while (S[k]<>',') and (k<>Length(S)) do begin k:=k+1; end; if S[k]=',' then begin while (S[k]<>C) and (k<>(Length(S))) do k:=k+1; end; if S[k]=C then begin Found:=Found+[C]; N:=N+1; Codes[N]:=Ord(C); end; i:=i+1; end; for i:=1 to N-1 do for j:=1 to N-i do if Codes[j]>Codes[j+1] then begin k:=Codes[j]; Codes[j]:=Codes[j+1]; Codes[j+1]:=k; end; writeln('Результат:'); for i:=1 to N do write(Chr(Codes[i]),' '); if N=0 then writeln('таких согласных нет'); Readln; End. |
08.05.2014, 13:55 | #45 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Мне нужно перед всеми do..while поставить begin end кроме внешнего? или только во внешний? Вообщем делаю сейчас так и так проверю.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
08.05.2014, 14:09 | #46 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вроде сделал как вы сказали do while
begin end вот такая конструкция получилась но не выдает желаемого результата( Код:
Const Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р']; Var S:String; C:Char; i,j,k,N:integer; Found:Set of char; Codes:Array[1..10] of Byte; p:boolean; begin p:=true; while p=true do begin Writeln('Введите строку:'); Readln(S); if length(s) = 0 then writeln('Пустая строка, введите еще раз!') else begin p:=false; end; end; Writeln; Found:=[]; N:=1; i:=1; while (i<>length(s)-1) do begin If (S[i] in Sonants) and not (S[i] in Found) then begin C:=S[i]; k:=i; while (S[k]<>',') and (k<>Length(S)) do begin k:=k+1; end; if S[k]=',' then begin while (S[k]<>C) and (k<>(Length(S))) do begin k:=k+1; end; end; if S[k]=C then begin Found:=Found+[C]; N:=N+1; Codes[N]:=Ord(C); end; i:=i+1; end; end; for i:=1 to N-1 do for j:=1 to N-i do if Codes[j]>Codes[j+1] then begin k:=Codes[j]; Codes[j]:=Codes[j+1]; Codes[j+1]:=k; end; writeln('Результат:'); for i:=1 to N do write(Chr(Codes[i]),' '); if N=0 then writeln('таких согласных нет'); Readln; |
08.05.2014, 14:35 | #49 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Посмотрел, кое-что кое-где подправил, вот:
Код:
Const Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р']; Var S:String; C:Char; i,j,k,N:integer; Found:Set of char; Codes:Array[1..10] of Byte; p:boolean; begin p:=true; while p=true do begin Writeln('Введите строку:'); Readln(S); if length(s) = 0 then writeln('Пустая строка, введите еще раз!') else p:=false; end; Writeln; Found:=[]; N:=1; i:=1; while (i<>length(s)-1) do begin If (S[i] in Sonants) and not (S[i] in Found) then begin C:=S[i]; k:=i; while (S[k]<>',') and (k<>Length(S)) do k:=k+1; if S[k]=',' then while (S[k]<>C) and (k<>(Length(S))) do k:=k+1; if S[k]=C then begin Found:=Found+[C]; N:=N+1; Codes[N]:=Ord(C); end; end; i:=i+1; end; for i:=1 to N-1 do for j:=1 to N-i do if Codes[j]>Codes[j+1] then begin k:=Codes[j]; Codes[j]:=Codes[j+1]; Codes[j+1]:=k; end; writeln('Результат:'); for i:=1 to N do write(Chr(Codes[i]),' '); if N=0 then writeln('таких согласных нет'); Readln; end. |
08.05.2014, 15:47 | #50 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Дело в том что старый я лучше понял. Спасибо огромное.
Я посмотрел в коде но не нашел объяснения тому почему выводится символ "а" вначале строки с результатом Прилагаю скрины, чтобы было понятнее что не так с этой буквой "а" Последний раз редактировалось pashasnuff; 08.05.2014 в 15:56 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|