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

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

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

 
 Ответить  Открыть новую тему 
> Программа для вычисления гласных
сообщение
Сообщение #1





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

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


ЗАДАНИЕ :
1 . Петя Пяточкин считает склады

Hазва программы : syllable . *

Любознательный киевский школьник Петя Пяточкин как-то заинтересовался языкознанием - наукой о языке. Для важного исследования Пете нужно выяснить , сколько слогов имеют названия натуральных чисел ( количественные числительные в именительном падеже ) , т.е. сколько гласных букв они содержат . Помогите Пете , написав программу , которая дает ответ на этот вопрос.

входные данные
Во входном файле указано натуральное число n , количество складов для которого нужно посчитать . Число n не превышает 100.

выходные данные
Единственная строка выходного файла должна содержать количество складов , которые в своем названии украинском языке имеет число n .

примеры
входной файл
syllable.in
1
25

Исходный файл
syllable.out
2
3

Помощь к примерам
Слово «один » имеет два состава (содержит две гласные буквы ) . Название числа 25 - « двадцать пять » - имеет три состава (содержит три гласные буквы ) .
----------------------------------------------------------------------------------------------------------------------
МОЯ ПРОГРАММА :
program golosni;
var
x1,x2,x3,x4,s,s1:integer;
p1,p2:integer;
t:text;
tv:text;
begin
assign(t,'syllable.in');
reset(t);
read(t,p1);
close(t);
s:=0;
x2:=trunc(p1/10);
x1:=p1-(x2*10);
if x2=1 then
case x1 of
0: s:=s+2;
1: s:=s+4;
2: s:=s+3;
3: s:=s+3;
4: s:=s+4;
5: s:=s+3;
6: s:=s+3;
7: s:=s+3;
8: s:=s+4;
9: s:=s+3;
end
else begin
case x2 of
2: s:=s+2;
3: s:=s+2;
4: s:=s+2;
5: s:=s+3;
6: s:=s+3;
7: s:=s+3;
8: s:=s+4;
9: s:=s+4;
end;
case x1 of
0: s:=s+1;
1: s:=s+2;
2: s:=s+1;
3: s:=s+1;
4: s:=s+3;
5: s:=s+1;
6: s:=s+1;
7: s:=s+1;
8: s:=s+2;
9: s:=s+2;
end;
end;
reset(t);
read(t,p2);
close(t);
s1:=0;
x4:=trunc(p2/10);
x3:=p2-(x4*10);
if x4=1 then
case x3 of
0: s1:=s1+2;
1: s1:=s1+4;
2: s1:=s1+3;
3: s1:=s1+3;
4: s1:=s1+4;
5: s1:=s1+3;
6: s1:=s1+3;
7: s1:=s1+3;
8: s1:=s1+4;
9: s1:=s1+3;
end
else begin
case x4 of
2: s1:=s1+2;
3: s1:=s1+2;
4: s1:=s1+2;
5: s1:=s1+3;
6: s1:=s1+3;
7: s1:=s1+3;
8: s1:=s1+4;
9: s1:=s1+4;
end;
case x3 of
0: s1:=s1+1;
1: s1:=s1+2;
2: s1:=s1+1;
3: s1:=s1+1;
4: s1:=s1+3;
5: s1:=s1+1;
6: s1:=s1+1;
7: s1:=s1+1;
8: s1:=s1+2;
9: s1:=s1+2;
end;
end;
assign(tv,'syllable.out');
rewrite(tv);
writeln(tv,s);
writeln(tv,s1);
close(tv);
writeln ('Kilkist golosnyh ' , s,',',s1);


readln;
end.


----------------------------------------------------------------------------------------------------------------------
Все работает, щитает правильно (делал с учителем по инфоматике. Ми делали для вычисления из 1 числа). Мне нужно было переделать чтобы считывало из файла 2 числа (каждое с нового рядка) и вычисляло отдельно для этих двух чисел и звписывало их в выходной файл. Но проблема: щитает правильно только для первого числа, для второго выводит тоже значение что и для первого.

пример. нужно:
2
3
Выводит:
2
2.
Помогите найти ошибку. Зарание спасибо.

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


Знаток
****

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

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


1. Ты, наверное, впервые на подобном форуме. Перед тем, как приводить листинг программы нажми кнопку CODE, скопируй код, а потом нажми на кнопку '#' рядом с CODE. Теперь твоя программа находится между тегами форматирования и будет удобно отображена.
2. Для улучшения читабельности воспользуйся форматтером кода JCF (смотри здесь).
3. По сути вопроса. Ошибка возникла из-за Copy-Paste - ты повторно открываешь файл t на чтение.
4. Для текстовых файлов есть различия между read и readln. Тебе нужно считывать readln.

По-хорошему, тебе бы реорганизовать код программы. Ну, например, так:
Функция возвращает количество гласных}
function CountG(p: integer):integer;
...................
реализация функции
...................

var
........
begin
assign(t, 'syllable.in');
reset(t);
assign(tv, 'syllable.out');
rewrite(tv);
while not eof(t) do
begin
readln(t, p1);
writeln(tv, CountG(p1));
end;
close(t);
close(tv);
end.

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

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

 





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