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

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

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

 
 Ответить  Открыть новую тему 
> Простейшая задача на String, и маааленький вопрос по n!
сообщение
Сообщение #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 -


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


Гость






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


Пионер
**

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

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


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


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


Гость






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

Ну, и в третьих... Если бы это было так просто, то наверное такие задания не давали бы, как ты думаешь?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


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

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

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


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


snoWolf
**

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

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


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


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


Гость






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

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

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


snoWolf
**

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

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


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


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


Пионер
**

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

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


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


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

--------------------
Учение есть учение, а свет есть свет и ненадо обобщать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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


Гость






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


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

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

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


пробел


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


snoWolf
**

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

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


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


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


Гость






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

Вся проблема в том, что внутри САМОГО внешнего While выполняется не только другой While, а еще и условие...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 

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

 





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