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

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

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

 
 Ответить  Открыть новую тему 
> Пара задач (циклы for do ), .
сообщение
Сообщение #1


Новичок
*

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

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


Доброго времени суток жителям форума,в изучении темы задался вопросом решения задач(2 штучки),свои варианты написал,но не уверен,правильно ли с точки зрения программирования
Задание 6.5.
Написать программу вычисления n! (факториал числа n), где n положительно. Определение факториала:
0! = 1
1! = 1
2! = 1*2
3! = 1*2*3
n! = 1 * 2 * 3 *.... * (n - 1) * n
Другими словами, n! — это произведение первых n натуральных чисел.
Каждый следующий результат (обозначим его Р) получается путем умножения предыдущего результата (предыдущего Р) на счетчик, который пробегает значения от 1 до n.
Обозначим значение счетчика буквой k.
Получаем общий вид выражения: Р = Р * k (то есть воспользуемся рекуррентной формулой вычисления факториала: n! = (n - 1)! * n).
Программа должна быть организована так: с клавиатуры вводится число n (n— положительно), а затем на экран выдается таблица факториалов чисел до n включительно.
____________________________________________________
Как я понял натуральные числа-все целые,не отрицательные числа(12,256,1),но не (-24.5 ; 45.6);
Тогда вот код:
Код
uses crt;
var p,k,n:integer;
begin
p:=1;
readln(n);
for k:=1 to n do
   p:=p*k;
writeln(p);
end.


Почему k:=1 ? ...Потому что если К будет =0 то P:=p*k = (P*0),а любое число,умнодженное на ноль - ноль),поэтому я взял k:=1
__________________________________
Задание 6.6.
Написать программу вычисления суммы ряда S=1 + 2 + 3 + 4 + 5 + 6. Нарисовать блок-схему и заполнить таблицу трассировки. Убедиться при трассировке, что сумма равна 21.
________________
Мое решение :
Код
uses crt;
var p,k,n:integer;
begin
p:=0;
readln(k);
for n:=1 to k do
p:=P+n;
writeln(p);
end.

Вот собственно,можете проверить,что я не так делаю?
Спасибо.


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

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

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


Зачем подключать crt, если вы его не используете,во вторых, зачем писать такую терраду,на тему факториала. В третьих, не понятно,в чем вопрос то?
Цитата

Вот собственно,можете проверить,что я не так делаю?
Спасибо.

А что не работает то?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(Krjuger @ 24.12.2011 22:16) *

Зачем подключать crt, если вы его не используете,во вторых, зачем писать такую терраду,на тему факториала. В третьих, не понятно,в чем вопрос то?

А что не работает то?

моя задача - написать программу по заданию,правильного ответа я не нашел,спросить не у кого,решил проверить код у вас,правильно ли я действую,есть ли ошибки.и можно ли как нибудь оптимизировать код?
P.s. модуль crt - потому что программирую в PascalABC


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Цитата
Программа должна быть организована так: с клавиатуры вводится число n (n— положительно), а затем на экран выдается таблица факториалов чисел до n включительно.
И что, таблица-таки выдается? smile.gif

Цитата
P.s. модуль crt - потому что программирую в PascalABC
PascalABC также прекрасно работает без Crt, просто вся работа осуществляется в одном окне, а не создается новое. Да и вообще: PascalABC - не самый удачный выбор для изучения основ программирования. Я где-то уже говорил об этом, начинать лучше с того, что дает меньше лишних возможностей. К примеру, с Турбо Паскаля. Чтоб не было соблазна использовать средства, специфичные для какого-то компилятора, пока не научишься использовать стандартные средства самого языка.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Создал мини "таблицу" из двух столбиков
!факториал числа = число
Код
var p,k,n:integer;
begin
p:=1;
writeln('Введите число ...');
readln(n);
for k:=1 to n do
begin
   p:=p*k;
writeln('!',k,'=',p);
end;
writeln('факториал числа ',n,'= ',p);
end.

Uses crt; убрал....
так пойдет или нужно другую таблицу? blink.gif wacko.gif


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Цитата
так пойдет или нужно другую таблицу?
Я бы все-таки отформатировал, чтоб таблица на таблицу была похожа:
for k:=1 to n do
begin
p:=p*k;
writeln(k:2,'! = ',p:12);
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Цитата(IUnknown @ 24.12.2011 23:28) *

Я бы все-таки отформатировал, чтоб таблица на таблицу была похожа:
for k:=1 to n do
begin
p:=p*k;
writeln(k:2,'! = ',p:12);
end;


Действительно,красиво,спасибо вам good.gif


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


у меня к вам еше 2 вопроса
1)
есть задача,в ней мы должны уложиться в 4 цикла,а у меня получается только в 8....т.е. 4 но в каждом из них по вложенному циклу
Задание 6.8.
Используя возможности модуля Crt, напишите программу, в которой символ «звездочка» (*) пробегает по всему периметру экрана из верхнего левого угла.
Пояснение: в программе организуйте 4 цикла. В качестве счетчика используйте координаты X и Y. Нарисуйте блок-схему алгоритма.
Попробуйте изменить программу, используя всего два цикла: в одном цикле звездочки бегут сразу по верхней и нижней строкам экрана, в другом — сразу по левому и правому краю. Пусть каждая следующая звездочка выводится случайным цветом.(это я вообще не смог сделать,возможно необходимо будет прописать
random,но как...? )
Мой вариант без выделенного условия(вложение turboPascal)
2)
Задание 6.6.
Написать программу вычисления суммы ряда для n слагаемых (n вводится с клавиатуры):
1/(1*2*3) + 1/(2*3*4) + 1/(3*4*5) + 1/(4*5*6) + …
Заметил тут лишь закономерность,в знаменателе идет три цифры,причем начинаются они с n+1,т.е. первое число знаменателя 2*3*4 ... потом 3*4*5...потом 4*5*6,а как это реализовать?
с 1/(1*1)+1/(2*2)+1/(3*3) я сделал

Код
var k,n:integer;
    a,s:real;
begin
S:=0;
readln(k);
for n:=1 to k do
begin
a:=1/n;
s:=s+a*a
end;
writeln('Сумма чисел = ',S:6:2);
readln
end.

Поможете?

Сообщение отредактировано: Дмитрий Ильин -


Прикрепленные файлы
Прикрепленный файл  ZVEZDA_E.PAS ( 576 байт ) Кол-во скачиваний: 275


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Цитата
а у меня получается только в 8
Первый цикл - координата X изменяется от 1 до 80, Y - постоянна (равна 1).
Второй: координата X постоянна (равна 80), Y изменяется от 1 до 25.
Третий: X изменяется от 80 до 1, Y = 25
Четвертый: X постоянна (равна 1), Y меняется от 25 до 1

Зачем еще 4 цикла (тем более, зачем циклы делать вложенными) - непонятно совершенно. Вложенность тут напрочь не нужна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Цитата(IUnknown @ 25.12.2011 14:32) *

Первый цикл - координата X изменяется от 1 до 80, Y - постоянна (равна 1).
Второй: координата X постоянна (равна 80), Y изменяется от 1 до 25.
Третий: X изменяется от 80 до 1, Y = 25
Четвертый: X постоянна (равна 1), Y меняется от 25 до 1

Зачем еще 4 цикла (тем более, зачем циклы делать вложенными) - непонятно совершенно. Вложенность тут напрочь не нужна.

Вы вложение смотрели?там все точно так же как и вы говорите,вот только как ей перемещаться,если одной из координат не будет?Поэтому и приходится ее писать (GoToXY(x,y))
Хотя можно заменить "в холостую руботающий цикл" на Y:=1 ...
Тут я с вами согласен.
А вот как сделать 2 задачу?

Сообщение отредактировано: Дмитрий Ильин -


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Цитата
там все точно так же как и вы говорите
Неправда. Я ничего не говорил о том, что внутри цикла по X должен быть цикл по Y.
Цитата
for x:=1 to 80 do
for y:=1 to 1 do
, и про это:
Цитата
For x:=80 to 80 do
for y:=1 to 23 do
я тоже ничего не говорил. Закончился один цикл - начался второй.

Добавлено через 2 мин.
Цитата
первое число знаменателя 2*3*4 ... потом 3*4*5...потом 4*5*6,а как это реализовать?

s := 0;
for i := 1 to n do
begin
p := 1;
for j := 0 to 2 do p := p * (i + j);

s := s + 1 / p
end;

не пробовал?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

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

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


Работает,работает...
Вот только для понимания сложно,а додумать тем более .
Можете немного пояснить алгоритм и названия переменных?
Надеюсь на понимание


--------------------
Каждый программист - Творец (с)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Названия переменных - стандартные: S=сумма, P=произведение, i=управляющая переменная цикла. Алгоритм такой:
Цитата
Заметил тут лишь закономерность,в знаменателе идет три цифры,причем начинаются они с
N (а не с N+1). Значит, для того чтобы найти знаменатель на каждом шаге, достаточно перемножить 3 последовательных числа, начиная с N. Как это проще всего сделать? Правильно, написав вложенный цикл j = 0..2, и добавив переменную j к номеру текущего слагаемого. Тогда для i = 1 внутренний цикл переберет значения
j = (1+0), (1+1), (1+2) = 1, 2, 3
, для i = 2:
j = (2+0), (2+1), (2+2) = 2, 3, 4
и так далее... Ну, а перемножать 3 числа в цикле ты уже умеешь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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