Форум: "Основная";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
ВнизКак написать чтоб Делпхи считал гласные и согласные буквы? Найти похожие ветки
← →
radion (2003-02-14 14:26) [0]В Лабораторной Работе мне надо написать функцыю которая подшитывает, в строке, на сколько гласных больше чем согласных.
Написал цикл, сделал щочики. А как опеделить какая буква гласная, а какая согласная? Или писать "if (S[i]="A") or (S[i]="B") or (S[i]="C")..." и т.д.?
***************************************************************
function HowMore(S:string):integer;
begin
Sog := 0;
Gla := 0;
For i:=1 to Length(S) do
begin
If S[i] = ??? then Sog:=Sog+1; // podschjot SOG
If S[i] = ??? then Gla:=Gla+1; // podschjot GLA
end;
Result:=Gla-Sog;
end;
***************************************************************
Спасибо!
← →
Reindeer Moss Eater (2003-02-14 14:28) [1]Спроси у учительницы русского языка. И не только про гласные/согласные.
← →
radion (2003-02-14 14:31) [2]Да буквы то вводятся англиские, типа "a,b,c,d,e,f...".
← →
Reindeer Moss Eater (2003-02-14 14:36) [3]Ну тогда к англичанке твой путь лежит
← →
Reindeer Moss Eater (2003-02-14 14:36) [4]Но к русичке все же заскочи.
← →
Юров Владимир (2003-02-14 14:48) [5]Попробуй такой вариант:
function HowMore(S:string):integer;
Const
Sog = "bcdfg"; {Согласные}
Gla = "aei"; {Гласные}
Var
I, S, G : Integer;
C : String[1];
begin
S := 0;
G := 0;
For i:=1 to Length(Edit1.Text) do
begin
C := Copy(Edit1.Text, i, 1);
If pos(C, Sog) <> 0 then Inc(S);
If pos(C, Gla) <> 0 then Inc(G);
end;
Result := G - S;
end;
Топорно, но работает.
При желании можно оптимизировать алгоритм
← →
Юров Владимир (2003-02-14 14:52) [6]Ошибся в заголовке и теле функции:
Заголовок:
function HowMore(St:string):integer;
Тело:
...
For i:=1 to Length(St.Text) do
begin
C := Copy(St, i, 1);
If pos(C, Sog) <> 0 then Inc(S);
If pos(C, Gla) <> 0 then Inc(G);
end;
...
← →
MBo (2003-02-14 14:59) [7]лучше не со строками, а со множествами символов работать, применяя in
← →
Юров Владимир (2003-02-14 15:02) [8]Можно и со множествами, но, ИМХО, в строки проще
← →
myor (2003-02-14 15:28) [9]по-моему лучше MBo © (14.02.03 14:59)
← →
radion (2003-02-14 15:40) [10]Спасибо,Юров Владимир, написал - работает :) !
Const SOG = "bcdgjklmnpqrstvwxyzBCDGJKLMNPQRSTVWXYZ";
Const GLA = "aeiouyAEIOUY";
VAR Scount,Gcount:integer;
VAR RC,i:integer;
VAR S:string;
function HowMore(S:string):integer;
begin
Scount := 0;
Gcount := 0;
For i:=1 to Length(S) do
begin
If Pos(S[i],SOG) <> 0 then Scount:=Scount+1;
If Pos(S[i],GLA) <> 0 then Gcount:=Gcount+1;
end;
Result:=Gcount-Scount;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
S:=Edit1.Text;
ListBox1.Items.Add(S);
RC:=HowMore(S);
If RC >= 3 then ListBox2.Items.Add(S);
If RC >= 3 then ListBox3.Items.Add( IntToStr(RC) );
end;
end.
← →
han_malign (2003-02-14 15:46) [11](UpperCase(S[i])in["A","E","I","O","U","Y"])
← →
Shadow (2003-02-14 15:46) [12]2Radion
AnsiUpperCase не судьба использовать?
← →
myor (2003-02-14 17:40) [13]...
var g_count, i: integer;
s: string;
begin
s:=edit1.text;
g_count:=0;
for i:=1 to length(s) do
if s[i] in ["E","Y","U","I","O","A","e","y","u","i","o","a"]
then inc(g_count)
else dec(g_count);
end;
...
label1.caption:=inttostr(g_count);
...
← →
radion (2003-02-14 21:15) [14]не, там задание было именно чтоб с функцией написать.
А если усер цифру вбацает :) ?
← →
Shc (2003-02-14 21:16) [15]Вообще-то, действительно, достаточно использовать только одно множество (или строку - по хелпу бистрее), причем только из больших (маленьких) букв.
← →
radion (2003-02-14 23:22) [16]Нет, тут видь спрашиваются именно гласные и согласные буквы. Т.е. нелзя предпологать что "если S[i] <> согласная, то это гласная", потаму что это можит быть и цифра, или какая точка-запитая. Разве нет?
← →
Shc (2003-02-15 18:17) [17]Как человек, причастный к составлению подобных заданий, я просто предплагаю, что в большинстве таких заданий действует принцип "исключения третьего".
← →
Shc (2003-02-15 18:18) [18]Как человек, причастный к составлению подобных заданий, я просто предплагаю, что в большинстве таких заданий действует принцип "исключения третьего", но если такое не оговаривается, то, конечно, следует описивать оба множества (строки).
← →
myor (2003-02-17 12:16) [19]поправочка (myor © (14.02.03 17:40)):
...
if s[i] in ["E","Y","U","I","O","A","e","y","u","i","o","a"]
then inc(g_count)
else
if s[i] in ["q","w","r","t",...]//согласные
then dec(g_count);
...
← →
Юров Владимир (2003-02-17 12:24) [20]2myor ©
А если надо посчитать не согласные и гласные буквы, а скажем, символы и цифры? И без вмешательства в код?
← →
myor (2003-02-17 12:42) [21]как это "без вмешательства"?
если не известно наперед, что с чем сравнивать?
задаешь множества "гласные", "согласные", "знаки препинания",
"математические знаки", "цифры", "специальные знаки" и т. д..
а чекбоксом определяешь пару групп для сравнения.
так пойдет?
← →
Юров Владимир (2003-02-17 12:54) [22]Я к тому что наборы символов можно хранить в отдельном файле.
ИМХО в строки проще запихать содержимое файла, чем во множества
← →
myor (2003-02-17 13:14) [23]зачем же их в файле хранить?
собственно, по вопросу есть два варианта: строка + pos и множество + in.
radion, похоже, выбрал твой вариант.
← →
radion (2003-02-17 17:17) [24]Строку + Пос я выбрал по тому, что, честно говоря, множества + ин мы ещо не прохадили :(
Как всё выгледит, можно увидить на
http://www.vi2.com/getFile/96536.jpg
Потом заменяети "jpg" на "doc" и открываети в Ворде.
Спасибо!
← →
mate (2003-02-17 17:54) [25]radion © но вот это обязательно сделай ->
Reindeer Moss Eater (14.02.03 14:36)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c