Пара задач (циклы for do ), . |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Пара задач (циклы for do ), . |
Дмитрий Ильин |
24.12.2011 20:44
Сообщение
#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. Вот собственно,можете проверить,что я не так делаю? Спасибо. -------------------- Каждый программист - Творец (с)
|
Krjuger |
24.12.2011 22:16
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Зачем подключать crt, если вы его не используете,во вторых, зачем писать такую терраду,на тему факториала. В третьих, не понятно,в чем вопрос то?
Цитата Вот собственно,можете проверить,что я не так делаю? Спасибо. А что не работает то? |
Дмитрий Ильин |
24.12.2011 22:19
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Зачем подключать crt, если вы его не используете,во вторых, зачем писать такую терраду,на тему факториала. В третьих, не понятно,в чем вопрос то? А что не работает то? моя задача - написать программу по заданию,правильного ответа я не нашел,спросить не у кого,решил проверить код у вас,правильно ли я действую,есть ли ошибки.и можно ли как нибудь оптимизировать код? P.s. модуль crt - потому что программирую в PascalABC -------------------- Каждый программист - Творец (с)
|
IUnknown |
24.12.2011 22:42
Сообщение
#4
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата Программа должна быть организована так: с клавиатуры вводится число n (n— положительно), а затем на экран выдается таблица факториалов чисел до n включительно. И что, таблица-таки выдается? Цитата P.s. модуль crt - потому что программирую в PascalABC PascalABC также прекрасно работает без Crt, просто вся работа осуществляется в одном окне, а не создается новое. Да и вообще: PascalABC - не самый удачный выбор для изучения основ программирования. Я где-то уже говорил об этом, начинать лучше с того, что дает меньше лишних возможностей. К примеру, с Турбо Паскаля. Чтоб не было соблазна использовать средства, специфичные для какого-то компилятора, пока не научишься использовать стандартные средства самого языка. |
Дмитрий Ильин |
24.12.2011 23:06
Сообщение
#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; убрал.... так пойдет или нужно другую таблицу? -------------------- Каждый программист - Творец (с)
|
IUnknown |
24.12.2011 23:28
Сообщение
#6
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата так пойдет или нужно другую таблицу? Я бы все-таки отформатировал, чтоб таблица на таблицу была похожа:for k:=1 to n do |
Дмитрий Ильин |
24.12.2011 23:47
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Я бы все-таки отформатировал, чтоб таблица на таблицу была похожа: for k:=1 to n do Действительно,красиво,спасибо вам -------------------- Каждый программист - Творец (с)
|
Дмитрий Ильин |
25.12.2011 14:11
Сообщение
#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. Поможете? Сообщение отредактировано: Дмитрий Ильин - 25.12.2011 14:13 Прикрепленные файлы ZVEZDA_E.PAS ( 576 байт ) Кол-во скачиваний: 193 -------------------- Каждый программист - Творец (с)
|
IUnknown |
25.12.2011 14:32
Сообщение
#9
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата а у меня получается только в 8 Первый цикл - координата X изменяется от 1 до 80, Y - постоянна (равна 1).Второй: координата X постоянна (равна 80), Y изменяется от 1 до 25. Третий: X изменяется от 80 до 1, Y = 25 Четвертый: X постоянна (равна 1), Y меняется от 25 до 1 Зачем еще 4 цикла (тем более, зачем циклы делать вложенными) - непонятно совершенно. Вложенность тут напрочь не нужна. |
Дмитрий Ильин |
25.12.2011 15:05
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Первый цикл - координата 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 задачу? Сообщение отредактировано: Дмитрий Ильин - 25.12.2011 15:29 -------------------- Каждый программист - Творец (с)
|
IUnknown |
25.12.2011 15:30
Сообщение
#11
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата там все точно так же как и вы говорите Неправда. Я ничего не говорил о том, что внутри цикла по X должен быть цикл по Y.Цитата for x:=1 to 80 do Цитата For x:=80 to 80 do Добавлено через 2 мин. Цитата первое число знаменателя 2*3*4 ... потом 3*4*5...потом 4*5*6,а как это реализовать? s := 0; не пробовал? |
Дмитрий Ильин |
25.12.2011 16:12
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Дмитрий Репутация: 0 |
Работает,работает...
Вот только для понимания сложно,а додумать тем более . Можете немного пояснить алгоритм и названия переменных? Надеюсь на понимание -------------------- Каждый программист - Творец (с)
|
IUnknown |
25.12.2011 16:31
Сообщение
#13
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 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 числа в цикле ты уже умеешь. |
Текстовая версия | 24.05.2024 7:41 |