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

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

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

 
 Ответить  Открыть новую тему 
> Буквы в строке
Вячеслав Л.
сообщение 29.09.2009 14:19
Сообщение #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 
 К началу страницы 
+ Ответить 
RathaR
сообщение 29.09.2009 16:14
Сообщение #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 - 29.09.2009 16:21


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


Бывалый
***

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

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


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

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

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

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

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

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





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


Гость






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


mea culpa
*****

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

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


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

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


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


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


Гость






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

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


Бывалый
***

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

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


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

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

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

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

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


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


Знаток
****

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

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


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

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

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


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


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

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

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


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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 1.10.2009 9:45
Сообщение #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

 

- Текстовая версия 18.07.2025 1:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"