IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Буквы в строке
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  3  +


Задание:

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

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

Код
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.


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Цитата(Вячеслав Людской @ 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 -


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  3  +


Rathar за прогу спасибо, но маленько не то. Дело в том, что мне надо использовать оператор ord, помоги пожалуйста его туда вставить.

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

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

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

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

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





--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  3  +


volvo, серьезно, ты и меня пойми

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

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

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

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

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


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


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

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


Не понял, а почему глупо? Код volvo решает твою задачу.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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

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


Бывалый
***

Группа: Пользователи
Сообщений: 227
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  3  +


Хорошо, volvo, прости, я определился. Действительно, ord здесь не нужен, можно обойтись и без него.

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

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

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

Здесь, ты не прав, если бы мне была бы не нужна ваша помощь и ваши, как ты выразился, нотации, я бы сюда не обращался. Соответсвенно, критику по делу в свой адрес только приветствую.


--------------------
Само знание есть сила
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Цитата(Вячеслав Людской @ 30.09.2009 13:13) *

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

inc(I,N);
I - переменная целого типа которая будет увеличена, а N - число на которое будет увеличено I, если N не задан, то по умолчанию используеться 1, dec(I,N); - тоже самое, только на уменьшение.


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


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

При этом условие практически то же (а может, и более точно), требуемая функция использована, и функциональность кода повышена (на случай дописывания).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 16.04.2025 17:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name