Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| denizk |
6.1.2011, 18:15
Сообщение
#21
|
![]() Пользователь Группа: Активисты Сообщений: 654 Регистрация: 31.10.2007 Пользователь №: 18 005 |
|
| Tanker |
6.1.2011, 18:22
Сообщение
#22
|
|
Пользователь Группа: Активисты Сообщений: 363 Регистрация: 26.11.2009 Пользователь №: 22 377 |
у меня все работает. это твои ошибки при переводе
Так вообще алгоритм не работает)) У меня -------------------- Успехов!
|
| denizk |
6.1.2011, 18:49
Сообщение
#23
|
![]() Пользователь Группа: Активисты Сообщений: 654 Регистрация: 31.10.2007 Пользователь №: 18 005 |
|
| Tanker |
7.1.2011, 7:32
Сообщение
#24
|
|
Пользователь Группа: Активисты Сообщений: 363 Регистрация: 26.11.2009 Пользователь №: 22 377 |
у меня все переводит. даже с английского (после исправления твоей)
-------------------- Успехов!
|
| denizk |
7.1.2011, 15:38
Сообщение
#25
|
![]() Пользователь Группа: Активисты Сообщений: 654 Регистрация: 31.10.2007 Пользователь №: 18 005 |
|
| Tanker |
7.1.2011, 16:59
Сообщение
#26
|
|
Пользователь Группа: Активисты Сообщений: 363 Регистрация: 26.11.2009 Пользователь №: 22 377 |
Так это... тебе ж не понравился мой алгоритм
-------------------- Успехов!
|
| denizk |
8.1.2011, 15:15
Сообщение
#27
|
![]() Пользователь Группа: Активисты Сообщений: 654 Регистрация: 31.10.2007 Пользователь №: 18 005 |
|
| Tanker |
10.1.2011, 13:37
Сообщение
#28
|
|
Пользователь Группа: Активисты Сообщений: 363 Регистрация: 26.11.2009 Пользователь №: 22 377 |
Рабочеспособная и правильно работающая - разные понятия...
Код program Prj_chi2; {$APPTYPE CONSOLE} uses SysUtils; const S: ShortString = 'twenty three ten nine zero two hundred twenty one'; // от 0 до 999 var chislo, i, j, z: integer; poslednee, poryadok, predporyadok: byte; Symb: array[0..100] of string[10]; len: integer; {длина считанной строки} p: byte; {номер рассматриваемого символа в строке} Slovo: string[10]; {выделяемое слово} begin Symb[10] := 'ten'; Symb[20] := 'twenty'; Symb[30] := 'thirty'; Symb[40] := 'fourty'; Symb[50] := 'fifty'; Symb[60] := 'sixty'; Symb[70] := 'seventy'; Symb[80] := 'eighty'; Symb[90] := 'ninety'; Symb[1] := 'one'; Symb[2] := 'two'; Symb[3] := 'three'; Symb[4] := 'four'; Symb[5] := 'five'; Symb[6] := 'six'; Symb[7] := 'seven'; Symb[8] := 'eight'; Symb[9] := 'nine'; Symb[11] := 'eleven'; Symb[12] := 'twelve'; Symb[13] := 'thirteen'; Symb[14] := 'fourteen'; Symb[15] := 'fifteen'; Symb[16] := 'sixteen'; Symb[17] := 'seventeen'; Symb[18] := 'eighteen'; Symb[19] := 'nineteen'; {считываем строку S} //write('S=?'); readln(S); len:=Length(S); {длина строки S} p:=1; {начнем с первого символа} chislo:=-1; poryadok:=0; predporyadok:=100; poslednee:= 0; {пропустить пробелы в начале строки} while (p<=len) and (S[p]=' ') do p:=p+1; {выделяем слова пока не конц строки} while (p<=len) do begin {выделяем слово до пробела, запятой или конца строки} Slovo:=''; while (p<=len) and (S[p]<>' ') do begin Slovo:=Slovo + S[p]; {складываем символы в слово} p:=p+1; {к следующему символу} end; if Slovo<>'' then {если слово найдено} begin // -------------- if Slovo='zero' then // 0 begin if chislo<>-1 then writeln(chislo); writeln(0); chislo:=-1; poslednee:=0; poryadok:=1; predporyadok:=100; end; for J := 1 to 9 do if (Slovo=Symb[j]) then //1..9 begin if poryadok <=1 then begin if chislo<>-1 then writeln(chislo); chislo:= -1; end else begin chislo:=chislo+j; poslednee:= j; predporyadok:=poryadok; poryadok:=1; end; if chislo=-1 then begin chislo:=j; poslednee:=j; poryadok:=1; predporyadok:=100; end; end; for I := 20 to 90 do if (Slovo=Symb[i]) then //20 30 ... 90 begin if poryadok<=2 then begin if chislo<>-1 then writeln(chislo); chislo:= -1; end else begin chislo:=chislo+i; poslednee := i; predporyadok:=poryadok; poryadok:=2; end; if chislo=-1 then begin chislo:=i; poslednee:=i; poryadok:=2; predporyadok:=100; if i=10 then poryadok:=1; end; end; for Z := 10 to 19 do if (Slovo=Symb[z]) then //10..19 begin if poryadok<=2 then begin if chislo<>-1 then writeln(chislo); chislo := -1; end else begin chislo:=chislo+z; poslednee:= z; predporyadok:=poryadok; poryadok:=1; end; if chislo=-1 then begin chislo:=z; poslednee:=z; poryadok:=1; predporyadok:=100; end; end; if (Slovo = 'hundred') or (Slovo = 'hundreds') then //soten begin if predporyadok<=3 then begin chislo:= chislo-poslednee; if chislo<>0 then writeln(chislo); chislo:= poslednee*100; poslednee:=0; poryadok:=3; end else begin chislo:=chislo-poslednee+ poslednee*100; poslednee:=0; poryadok:=3; end; end; // -------------- end; {пропускаем пробелы и запятые, не выходя за пределы строки} while (p<=len) and (S[p]=' ') do p:=p+1; end; if chislo>0 then writeln(chislo); readln; writeln; end. -------------------- Успехов!
|
| denizk |
10.1.2011, 18:29
Сообщение
#29
|
![]() Пользователь Группа: Активисты Сообщений: 654 Регистрация: 31.10.2007 Пользователь №: 18 005 |
Ну чего мне осталось тебя только расцеловать))
Беру свои слова обратно)) Работает,спасибо большое)) Надеюсь препод ошибок ненайдёт)) |
| denizk |
12.1.2011, 14:23
Сообщение
#30
|
![]() Пользователь Группа: Активисты Сообщений: 654 Регистрация: 31.10.2007 Пользователь №: 18 005 |
Короче препод прикалывается))
Теперь он хочет чтоб в строке всё же одно число переводилось,ну это как бы фигня! Плюс была проверка на ошибку в слове,фигня! тоже сделал! А вот самое главное он хочет ещё проверку на порядок! ну тобишь one one друг за другом идти мол не могут)) Как бы реализовать?)) Помогай)) |
| denizk |
12.1.2011, 15:00
Сообщение
#31
|
![]() Пользователь Группа: Активисты Сообщений: 654 Регистрация: 31.10.2007 Пользователь №: 18 005 |
Вроде придумал! Проверь все или нет!
Код procedure TForm1.Button1Click(Sender: TObject); var S: String; A: Array[0..9] of String[7]; B: Array[10..27] of String[7]; Ia,Ja: Integer; Ib,Jb: Integer; Sta: String; Stb: String; P: Integer; Pt: Integer; begin A[0] := 'zero'; A[1] := 'one'; A[2] := 'two'; A[3] := 'three'; A[4] := 'four'; A[5] := 'five'; A[6] := 'six'; A[7] := 'seven'; A[8] := 'eight'; A[9] := 'nine'; B[10] := 'ten'; B[11] := 'eleven'; B[12] := 'twelve'; B[13] := 'thirteen'; B[14] := 'fourteen'; B[15] := 'fifteen'; B[16] := 'sixteen'; B[17] := 'seventeen'; B[18] := 'eighteen'; B[19] := 'nineteen'; B[20] := 'twenty'; B[21] := 'thirty'; B[22] := 'fourty'; B[23] := 'fifty'; B[24] := 'sixty'; B[25] := 'seventy'; B[26] := 'eighty'; B[27] := 'ninety'; S := Edit1.Text; P := 0; Pt := 0; Pt := pos('hundred hundred',S); if Pt > 0 then ShowMessage('Ошибка в порядке!'+#13+ 'Слова в строке: '+ S + ' так идти не могут'); if S = 'hundred' then ShowMessage('Ошибка в порядке!'+#13+ 'Слова в строке: '+ S + ' так идти не могут'); for Ia := 0 to 9 do for Ja := 0 to 9 do begin Sta := A[Ia]+' '+A[Ja]; P := pos(Sta,S); if P > 0 then ShowMessage('Ошибка в порядке!'+#13+ 'Слова в строке: '+ S + ' так идти не могут'); end; for Ib := 10 to 27 do for Jb := 10 to 27 do begin Stb := B[Ib]+' '+B[Jb]; P := pos(Stb,S); if P > 0 then ShowMessage('Ошибка в порядке!'+#13+ 'Слова в строке: '+ S + ' так идти не могут'); end; for Ia := 0 to 9 do for Jb := 10 to 27 do begin Sta := A[Ia]+' '+B[Jb]; P := pos(Sta,S); if P > 0 then ShowMessage('Ошибка в порядке!'+#13+ 'Слова в строке: '+ S + ' так идти не могут'); end; for Ib := 10 to 27 do begin Sta := B[Ib]+' '+'hundred'; P := pos(Sta,S); if P > 0 then ShowMessage('Ошибка в порядке!'+#13+ 'Слова в строке: '+ S + ' так идти не могут'); end; end; |
| Tanker |
13.1.2011, 10:06
Сообщение
#32
|
|
Пользователь Группа: Активисты Сообщений: 363 Регистрация: 26.11.2009 Пользователь №: 22 377 |
одно число переводилось,ну это как бы фигня! ... А вот самое главное он хочет ещё проверку на порядок! ну тобишь one one друг за другом идти мол не могут)) Как бы реализовать?)) Помогай)) сам вывод единственноо числа будет после цикла (если других сообщений не надо ((об ошибке))) и для "сотен" нужно добавить проверку, что перед ней порядок=1 ----- вышеперечисленное перекроет все ошибки кроме ошибок в написании слов -------------------- Успехов!
|
| denizk |
14.1.2011, 18:54
Сообщение
#33
|
![]() Пользователь Группа: Активисты Сообщений: 654 Регистрация: 31.10.2007 Пользователь №: 18 005 |
'Там где у мення вывод предыдущего числа - это значит, что начинается другое - эти моменты и надо и отследить сам вывод единственноо числа будет после цикла (если других сообщений не надо ((об ошибке))) и для "сотен" нужно добавить проверку, что перед ней порядок=1 ----- вышеперечисленное перекроет все ошибки кроме ошибок в написании слов Да уже сдал!)) Спасибо за помощь! |
![]() ![]() |
|
Текстовая версия | Сейчас: 20.5.2012, 23:55 |