|
#1
|
|||
|
|||
Перевернуть слово
Программа которая при вводе слова, считает количество согласных латинских букв и в ответе выдаёт это слово плюс этоже слово в перевернутом видео столько раз, сколько согласных букв в этом слове.
Всё готово, только немогу перевернуть. Подкскажите пожалуйста как. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function GetConsonantCount (S: string): Integer; const Consonants: set of Char = ['b','c','d','f','g','h','k','l','m','n','p','r','s','t','v','z','x']; var I: Integer; begin Result := 0; S := LowerCase(S); for I := 1 to Length(S) do begin if S[i] in Consonants then Inc(Result) end end; function Count (const S: string): string; var I: Integer; ConsonantCount: Integer; begin ConsonantCount := GetConsonantCount(S); for I := 0 to ConsonantCount do Insert (S,Result,I*(Length(S)+1)); end; procedure TForm1.Button1Click(Sender: TObject); begin Edit2.Text := Count(Edit1.Text) end; end. |
#2
|
|||
|
|||
Код:
function ReverseStr(const S: String): String; var L, i: Integer; begin L := Length(S); Result := ''; for i := 1 to L do Result := Result + S[L - i + 1]; end; |
#3
|
|||
|
|||
Спасибо, а как мне правильно интегрировать его в текст программы? Я пробую, не получается.
|
#4
|
|||
|
|||
Если я правильно понял, что введенное слово находится в Edit1, тогда примерно так:
Код:
procedure TForm1.Button1Click(Sender: TObject); var N: Integer; S: String; begin Edit2.Text := Count(Edit1.Text) Memo1.Clear; Memo1.Lines.Add(Edit1.Text); // Само введенное слово N := GetConsonantCount(Edit1.Text); // количество согласных S := ReverseStr(Edit1.Text); // переворачиваем слово While (N > 0) do begin // столько раз сколько согласных Memo1.Lines.Add(S); // добавляем слово в TMemo на форме N := N - 1; end; end; |
#5
|
|||
|
|||
Сам незнаю, в институте измываются над нами
Нет, для вывода используется Edit2.Text . Не получается что то. ошибки выдаёт |
#6
|
|||
|
|||
Цитата:
Как вы планировали работу программы организовать? Т.е. - вот есть Edit1, вводим туда текст, жмем кнопку - и? Куда нужно результаты выводить и в каком виде? |
#7
|
|||
|
|||
Хмм. На форме есть Edit1, Edit2 и Button1. В Edit1 я ввожу например слово "asd" , нажимаю на Button1 , и в получаю ответ в Edit2: "asddsadsa" .(т.е. в слове asd две согласные, значит он два раза приклеивает это слово в перевёрнутом виде). Воть
но на данном этапе программы, тот код что я выложил в самом начале, мой ответ в Edit2 : asdasdasd " |
#8
|
|||
|
|||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function CountConsonants(S: String): LongInt; const ConsonantChars: Set of Char = ['b','c','d','f','g','h','k','l','m','n','p','r','s','t','v','z','x']; var L, i: LongInt; begin L := Length(S); S := AnsiLowerCase(S); Result := 0; for i := 1 to L do if S[i] in ConsonantChars then Result := Result + 1; end; function ReverseStr(const S: String): String; var L, i: Integer; begin L := Length(S); Result := ''; for i := 1 to L do Result := Result + S[L - i + 1]; end; procedure TForm1.Button1Click(Sender: TObject); var N: LongInt; S: String; begin N := CountConsonants(Edit1.Text); S := ReverseStr(Edit1.Text); Edit2.Text := Edit1.Text; while (N > 0) do begin Edit2.Text := Edit2.Text + S; N := N - 1; end; end; end. |
#9
|
|||
|
|||
Ааааа, это просто магия. Спасибо огромное!!!
|
#10
|
|||
|
|||
Теперь не надо писать цикл для переворота, в модуле StrUtils есть такая фунция, напр.
Код:
Edit2.Text:= AnsiReverseString(Edit1.Text) |
#11
|
|||
|
|||
Цитата:
|