![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевёрнутые буквы [D6, XP]
Bpeguk © (2007-12-19 01:18:00)Добрый вечер, помогите пожалуйста в следующем: у меня задание - Приклеить к строке ее же в перевернутом виде столько раз, сколько в ней согласных букв. Вот что я сделал, но ЭТО не работает как надо, запутался я:
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}
const Sogl : array[1..17] of string = ('b','c','d','f','g','h','k','l','m','n','p','r','s','t','v','z','x');
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
j: integer;
k: integer;
sLine: string;
begin
k:=0;
sLine:=edit1.Text;
for i:=0 to Length(Edit1.Text) do begin
for j:=0 to Length(Sogl) do begin
if Edit1.Text[i]=Sogl[j] then
for k:=0 to Length(Edit1.Text) do begin
sLine:=memo1.lines.append(Edit1.Text[Length(Edit1.Text)-k]);
//sLine:=sLine+Edit1.Text[Length(Edit1.Text)-k];
end;
edit2.text:=sLine;
end;
end;
end;
end.
Джо (2007-12-19 05:01:00) [1]А, блин, там не StrLen, а Length(S)+1, конечно. Эк меня заглючило и даже не могу вспомнить причину этого :)
П.С. Функцию, «переворачивающую» строку писать не буду не из вредности, а из псевдо-педагогических соображений :)
Джо (2007-12-19 04:57:00) [2]А, точно, про перевернутые-то я и забыл.
Ну, напиши еще функцию, переворачивающую строку, там будет кода от силы на 5 строк и добавь к существующему коду, он тривиален же ж.
Насчет [6] ничего сказать не могу, бог его знает, что у вас там с инсертом. Пойду спать наконец :)
Bpeguk (2007-12-19 04:40:00) [3]Метод Insert , в System , в функции BlaBlaBla :) Я попробывал System.Insert , ничего не выходит, таже проблема :(((
Германн (2007-12-19 04:21:00) [4]
> Bpeguk © (19.12.07 04:11) [13]
>
> А как можно найти точное местоположение ошибки?
>
Достал.
Ну а там,где у тебя
> Делфи выделяет красным
это разве не точное месторасположение ошибки?
Я спрашивал про то, в какой процедуре, функции, методе находится эта строка, которая "выделяется красным". :(
На худой конец замени строкуInsert (S,Result,I*StrLen)на строкуSystem.Insert (S,Result,I*StrLen)и ложись спать.
Bpeguk (2007-12-19 04:11:00) [5]А как можно найти точное местоположение ошибки?
Германн (2007-12-19 04:08:00) [6]
> Bpeguk © (19.12.07 04:04) [11]
>
> Делфи выделяет красным "Insert (S,Result,I*StrLen)";
>
Ну а где? В каком месте кода?
Методов Insert в VCL есть более чем.
Bpeguk (2007-12-19 04:04:00) [7]Делфи выделяет красным "Insert (S,Result,I*StrLen)";
Германн (2007-12-19 03:41:00) [8]
> Bpeguk © (19.12.07 03:26) [8]
>
> Простите, незаметил этот комментарий. С 0 , потому, что
> я думал, что так правильно, видимо ошибался.
Ошибался.
> Bpeguk © (19.12.07 03:28) [9]
>
> А ошибка:
> [Error] Unit1.pas(52): Not enough actual parameters
>
А эта ошибка где возникает?
Bpeguk (2007-12-19 03:28:00) [9]А ошибка:
[Error] Unit1.pas(52): Not enough actual parameters
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Bpeguk (2007-12-19 03:26:00) [10]Простите, незаметил этот комментарий. С 0 , потому, что я думал, что так правильно, видимо ошибался. Я прибываю в небольшем замешателстве, т.к. напроч запутался в том, что написал месяц назад при помощи книг и конспектов, и если честно то не до конца понимаю систему работы массивов и циклов.
Германн (2007-12-19 03:16:00) [11]
> Bpeguk © (19.12.07 02:59) [6]
>
> Огромное спасибо. У меня ошибка на линии: Insert (S,Result,
> I*StrLen); Not enough actual parameters
У тебя ошибка не "на линии", а в мозгах. Какая ошибка, где, когда и в каком коде выдается?
А на [1] ответить не можешь? Религия не позволяет?
Bpeguk (2007-12-19 02:59:00) [12]Огромное спасибо. У меня ошибка на линии: Insert (S,Result,I*StrLen); Not enough actual parameters , не понимаю :(
Германн (2007-12-19 02:45:00) [13]
> Ну, зачем так сразу вот? :)
>
Ну почему "так сразу". В той ветке к этому времени уже перешли к другим классам ОПП :)
Но ты всё-таки на досуге ещё раз прочитай сабж. Там ведь нужно ещё что-то как-то переворачивать. Что и как - не очень понятно, посему я ограничился в [1] указанием на очевидную ошибку в приведенном коде. А дальше пусть автор подключится к обсуждению.
Джо (2007-12-19 02:27:00) [14]> [3] Германн © (19.12.07 02:05)
>
> > Джо © (19.12.07 01:48) [2]
> >
> > Приступы необъяснимой доброты...
> >
>
> Вызванные тем самым о чём спрашивал Kerk?
Ну, зачем так сразу вот? :)
Германн (2007-12-19 02:05:00) [15]
> Джо © (19.12.07 01:48) [2]
>
> Приступы необъяснимой доброты...
>
Вызванные тем самым о чём спрашивал Kerk?
Джо (2007-12-19 01:48:00) [16]Приступы необъяснимой доброты...
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 BlaBlaBla (const S: string): string;
var
I,
ConsonantCount: Integer;
begin
ConsonantCount := GetConsonantCount(S);
for I := 0 to ConsonantCount do
Insert (S,Result,I*StrLen);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := BlaBlaBla(Edit1.Text)
end;
Это если как попроще и понаглядней, без оптимизации. Разбирайтесь.
Германн (2007-12-19 01:22:00) [17]Во-первых. Почему все циклы начинаются с 0?