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

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

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

 
 Ответить  Открыть новую тему 
> Простейшая задача на String, и маааленький вопрос по n!
Art87
сообщение 12.01.2006 9:49
Сообщение #1


snoWolf
**

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

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


Задача такая: Слова в исходной строке разделены пробелами. Сформировать строку в которой будут все слова из первой строки начинающиеся на гласную букву.

program abc;
const glasn=['а','е','и','о','у','ы','э','ю','я'];
Var
S, S1: string;
a, n, l: byte;
i: char; {Первая буква слова}
begin
writeln ('Ввод текста: '); readln(S);
S:= S + '_';
a:=0; {Количество слов в тексте начинающихся с гласной буквы}
n:= pos('_', s);
while n<>0 do begin
l:=length(S);
i:= copy(S,1,l);
If i=glasn then a:= a + 1;
insert(a, S1, n); writeln(S1); readln;
end;
end;


Выдает ошибку после
Цитата
i:= copy(S,1,l);
- Несоответствие типов.
Ну и в правильности остальной программы я сомневаюсь. Посмотрите пожалуйста.

И еще хотел спросить:
Я написал прогу для вычисления n!
Var f, m: longint;
function fact (n: integer): longint;
begin
if n=0 then fact:= 1
else fact:= fact (n - 1)*n;
end;
begin
writeln('Ввод m: ');
readln(m);
f:=fact(m);
writeln('m= ', f); readln;
end.


Как сделать чтобы она вычисляла факториал (n>100)?

Сообщение отредактировано: volvo - 5.11.2006 21:35


--------------------
Нас десять братьев на тропе, идем мы быстро, на легке ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 12.01.2006 10:24
Сообщение #2


Гость






Цитата(Art87 @ 12.01.2006 9:49)
Как сделать чтобы она вычисляла факториал (n>100)?
Твоя программа этого делать не сможет (даже 14! в Longint уже не помещается)... Смотри здесь: FAQ: Длинная арифметика
 К началу страницы 
+ Ответить 
Студентик13
сообщение 12.01.2006 11:09
Сообщение #3


Пионер
**

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

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


Можно попробовать Вещественный тип данных EXTENDED


--------------------
Учение есть учение, а свет есть свет и ненадо обобщать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 12.01.2006 11:12
Сообщение #4


Гость






Студентик13, факториал по определению - целое число. И вычислять его нужно с точностью до единиц. Что тебе даст Extended? Во-первых, уверен ли ты, что в него число 100! поместится? Во-вторых, точность - никакая, всего 19..20 значащих цифр мантиссы...

Ну, и в третьих... Если бы это было так просто, то наверное такие задания не давали бы, как ты думаешь?
 К началу страницы 
+ Ответить 
Art87
сообщение 12.01.2006 11:18
Сообщение #5


snoWolf
**

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

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


А если так:


var
p, r, d: longint;
i, j, n: integer;

c: array [1..1000] of byte;
begin
writeln('Vvedite n ');
C[1]:=1; r:=1;
for i:=2 to n do
p:=0;
for j:=1 to r do
d:=c[j] * (i+p);
c[j]:= d mod 10;
p:= p div 10;
If p<>0 then
begin
r:=r+1;
C[r]:= p mod 10;
p:= p div 10;
end; end.


Только не пойму, почему не запускается. Хотя и ошибки не выдает.


--------------------
Нас десять братьев на тропе, идем мы быстро, на легке ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Студентик13
сообщение 12.01.2006 11:30
Сообщение #6


Пионер
**

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

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


а ты Read(n); Забыл дописать

Цитата
Во-первых, уверен ли ты, что в него число 100! поместится? Во-вторых, точность - никакая, всего 19..20 значащих цифр мантиссы...

Гость Длиннта EXTENDED'а в байтах равна 10'и и промежуток его чисел может состаелять от 3.4*10^-4932 до 1.7*10^4932 число 100! суда поместится темболее что оно целое


--------------------
Учение есть учение, а свет есть свет и ненадо обобщать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Art87
сообщение 12.01.2006 11:30
Сообщение #7


snoWolf
**

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

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


Студентик13
Спасибо. Я не только это забыл дописать.


--------------------
Нас десять братьев на тропе, идем мы быстро, на легке ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 12.01.2006 11:55
Сообщение #8


Гость






Студентик13, хорошо, я могу и авторизоваться. Давай ты мне скажешь, чему будет равна цифра №75 в числе 100! при его вычислении как Extended?

Я же тебе сказал, что здесь без длинной арифметики не обойтись...

P.S. Флейм удален... Устное предупреждение обоим...
 К началу страницы 
+ Ответить 
Art87
сообщение 12.01.2006 11:59
Сообщение #9


snoWolf
**

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

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


volvo
А программа на string почему не работает? Подскажите пожалуйста.


--------------------
Нас десять братьев на тропе, идем мы быстро, на легке ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Студентик13
сообщение 12.01.2006 13:27
Сообщение #10


Пионер
**

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

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


Твоя первая программа не работает поэтому(смотри PrtSc)


Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
Учение есть учение, а свет есть свет и ненадо обобщать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 12.01.2006 13:40
Сообщение #11


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Студентик13, я думаю эту строчку он смог и без тебя разглядеть, ты бы лучьше о своих задачах думал ...

uses crt;

procedure GetNewString(_in : string; var _out : string);
const glasn = ['у','е','ы','о','я','и','ю','а'];
var
i,back : byte;
begin
_out := '';
i := 1;
while ( i <= length(_in)) do begin
while ( i <= length(_in)) and (_in[i] = ' ') do inc(i);
if i <= length(_in) then begin
back := i;
while (i <= length(_in)) and not(_in[i] = ' ') do inc(i);
if _in[back] in glasn then _out := _out + copy(_in, back, i - back) + #32;
end;
end;
end;

var
s1,s2 : string;
begin
clrscr;
write('s1 = '); readln(s1);
GetNewString(s1,s2);
write('s2 = ' + s2);
readln;
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 12.01.2006 17:16
Сообщение #12


Гость






klem4
Спасибо огромное. У меня только один дуратский вопрос: Что значит код ASCII #32? Я в этой таблице так и не понял ничего.
 К началу страницы 
+ Ответить 
klem4
сообщение 12.01.2006 17:32
Сообщение #13


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


пробел


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Art87
сообщение 13.01.2006 10:14
Сообщение #14


snoWolf
**

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

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


klem4
Еще вопрос: А зачем столько циклов while? Там где 2 подряд идут, разве нельзя одним ограничиться?


--------------------
Нас десять братьев на тропе, идем мы быстро, на легке ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.01.2006 10:23
Сообщение #15


Гость






Нет... Каждый цикл здесь необходим... Это одна из самых часто требующихся задач, и klem4 уж наверное максимально оптимизировал код... smile.gif

Вся проблема в том, что внутри САМОГО внешнего While выполняется не только другой While, а еще и условие...
 К началу страницы 
+ Ответить 
mdcool
сообщение 25.04.2007 20:20
Сообщение #16


Гость






Цитата(Art87 @ 12.01.2006 9:49) *

И еще хотел спросить:
Я написал прогу для вычисления n!
Var f, m: longint;
function fact (n: integer): longint;
begin
if n=0 then fact:= 1
else fact:= fact (n - 1)*n;
end;
begin
writeln('Ввод m: ');
readln(m);
f:=fact(m);
writeln('m= ', f); readln;
end.


Как сделать чтобы она вычисляла факториал (n>100)?

уйди от рекурсии, те,е не хватает оперативки для выполнения, под локальные переменные выделяется 16 ктлобайт, и рекурсия только забивает их. попробуй

function fact(n:integer):longint;
var i:=integer;
begin
fact:=1;
for i:=1 to n do
fact:=fact*i
end;



М
Теме больше года ...



Сообщение отредактировано: klem4 - 25.04.2007 20:26
 К началу страницы 
+ Ответить 

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

 



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