Помощь - Поиск - Пользователи - Календарь
Полная версия: Буквы в строке
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Вячеслав Л.
Задание:

ввести строку (латинские буквы) и подсчитать кол-во букв 'а' в ней

Я думаю, это будет выглядеть как-то так:

Код
program hg;
var
st:string;
k:integer;
begin
for 1 to length(st) do
k:=ord(st,'a')
if k:=160 {esli ne owibayus' eto kod bykvy 'a'}
then k:=k+1
else writeln('bykv 'a' v stroke net');
end.
RathaR
Цитата(Вячеслав Людской @ 29.09.2009 14:19) *

Задание:
ввести строку (латинские буквы) и подсчитать кол-во букв 'а' в ней

а что мешает посимвольно пройтись по строке, проверить каждый символ, ровняеться ли он "а", эфект тотже, да и намного проще чем сравнивать через ASCII таблицу:
program hg;
var
st:string;
I,k:integer;
begin
k:=0;
write('Vvedite strokyy');
readln(st);

for I:=1 to length(st) do
If st[I]='a' then inc(k);

If k=0 then  writeln('bykv 'a' v stroke net') else writeln('Bykv a v stroke:', k);
end.


З.Ы. Я чтото в твоей програме не увидел где ты считываеш строку St...
З.З.Ы. Это роздел Паскаля, поэтому впредь бери код программ в теги "code=pas"...
Вячеслав Л.
Rathar за прогу спасибо, но маленько не то. Дело в том, что мне надо использовать оператор ord, помоги пожалуйста его туда вставить.

inc это увеличение на 1, а dec уменьшение да?

Цитата
Я чтото в твоей програме не увидел где ты считываеш строку St...

Про read(st) забыл, да, конечно...

Цитата
Это роздел Паскаля, поэтому впредь бери код программ в теги "code=pas"...

Буду знать, спасибо



volvo
Цитата
Дело в том, что мне надо использовать оператор ord, помоги пожалуйста его туда вставить.
То есть, неважно, что эта функция (функция, а не оператор на самом деле) не нужна для решения задачи, главное ее запихать?
for I:=1 to length(st) do
  If Ord(st[I]) = Ord('a') then inc(k);
, но это - извращение...
Вячеслав Л.
volvo, серьезно, ты и меня пойми

мы повторяем функции (именно функции, а не операторы, я оговорился) str, val, ord, chr.

Дается задание на умение использовать эти функции. Соответственно они должны быть в программе.

Цитата
for I:=1 to length(st) do
  If Ord(st[I]) = Ord('a') then inc(k);

Прости, но это глупо.

Как все-таки написать это с ord?
Unconnected
Цитата
Прости, но это глупо.

Как все-таки написать это с ord?


Не понял, а почему глупо? Код volvo решает твою задачу.
volvo
Цитата
Как все-таки написать это с ord?
Показываешь ему, как написать с Ord - "глупо", показываешь, как правильно - "мне надо с Ord"... Ты определись, "тебе шашечки или ехать?" (С) Ну, захардкодил ты:
for I:=1 to length(st) do
  If Ord(st[I]) = 97 then inc(k);
, тебе от этого проще стало? А ничего, что компилятор сгенерирует одинаковый код для этих двух вариантов, он ведь автоматически заменит Ord('a') на то самое 97... Только учти, придется посчитать количество русских букв, а Ord('м') на разных машинах может быть разным, привыкнешь делать "как не глупо" - будешь потом иметь большие проблемы, а мой код будет одинаково работать ВЕЗДЕ...

В общем, все понятно, нотации тебе не нужны, правила "как НЕ надо писать программы" ты тоже не читаешь, чего я тут распинаюсь?
Вячеслав Л.
Хорошо, volvo, прости, я определился. Действительно, ord здесь не нужен, можно обойтись и без него.

Цитата
А ничего, что компилятор сгенерирует одинаковый код для этих двух вариантов, он ведь автоматически заменит Ord('a') на то самое 97... Только учти, придется посчитать количество русских букв, а Ord('м') на разных машинах может быть разным, привыкнешь делать "как не глупо" - будешь потом иметь большие проблемы, а мой код будет одинаково работать ВЕЗДЕ...

За объяснение, спасибо, я этого просто не знал. Твой код действительно удобнее.

Цитата
В общем, все понятно, нотации тебе не нужны, правила "как НЕ надо писать программы" ты тоже не читаешь, чего я тут распинаюсь?

Здесь, ты не прав, если бы мне была бы не нужна ваша помощь и ваши, как ты выразился, нотации, я бы сюда не обращался. Соответсвенно, критику по делу в свой адрес только приветствую.
RathaR
Цитата(Вячеслав Людской @ 30.09.2009 13:13) *

inc это увеличение на 1, а dec уменьшение да?

inc(I,N);
I - переменная целого типа которая будет увеличена, а N - число на которое будет увеличено I, если N не задан, то по умолчанию используеться 1, dec(I,N); - тоже самое, только на уменьшение.
Lapp
У меня есть предложение зайти с другой стороны)). В условии сказано:
Цитата
подсчитать кол-во букв 'а' в ней
- заметьте: букв, а не символов. И это при некоторой фантазии можно понять как наличие как маленьких, так и больших букв 'a'. Хотя, это еще не дает достаточно доводов в пользу использования Ord. Но если мы добавим в программу некоторую универсальность (а именно, чтобы код изменялся самым минимальным образом при изменении 'a' на 'b' или еще что-то) - вот тут наш пресловутый Ord заявит о себе во весь голос.

При этом условие практически то же (а может, и более точно), требуемая функция использована, и функциональность кода повышена (на случай дописывания).
andriano
Цитата(Lapp @ 1.10.2009 1:36) *
Но если мы добавим в программу некоторую универсальность (а именно, чтобы код изменялся самым минимальным образом при изменении 'a' на 'b' или еще что-то) - вот тут наш пресловутый Ord заявит о себе во весь голос.
Не понял.
Минимальное изменение программы, это когда она при смене буквы вообще не меняется (а нужная буква, скажем, вводится с клавиатуры или из конфигурационного файла). И в этом случае не понимаю, как замена символьной константы на символьную переменную может привенсти к использованию оператора ord.
program hg;
var
  st:string;
  I,k:integer;
  ch : char;
begin
  write('Vvedite strokyy');
  readln(st);
  write('Vvedite bukvu dl''a poiska');
  readln(ch);

  k:=0;
  for I:=1 to length(st) do
    If st[I]=ch then inc(k);

  If k=0 then
    writeln('bykv ',ch,' v stroke net')
  else
    writeln('Bykv ',ch,' v stroke:', k);
end.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.