1 / 1 / 0 Регистрация: 01.10.2013 Сообщений: 9 |
|
1 |
|
Возведение в степень через цикл01.10.2013, 16:33. Показов 41914. Ответов 13
Помогите пожалуйста, не очень понимаю как посчитать это выражение R=a/(a+b)^b так, чтобы степень считалась через for, while, do while, и нужно возводить в степень именно через цикл
0 |
TyLinka 34 / 34 / 21 Регистрация: 02.02.2012 Сообщений: 181 |
||||
01.10.2013, 16:38 |
2 |
|||
b – целое
1 |
Super GT 6 / 6 / 1 Регистрация: 23.12.2012 Сообщений: 131 |
||||
01.10.2013, 16:39 |
3 |
|||
Сам новичок, если что поправьте, вполне возможно что ошибся)
1 |
Algoritmer 159 / 98 / 25 Регистрация: 07.03.2013 Сообщений: 512 Записей в блоге: 1 |
||||
01.10.2013, 16:42 |
4 |
|||
Это через for. В while нужно будет переменную, считающую кол-во итераций увеличивать в теле цикла.
1 |
TyLinka 34 / 34 / 21 Регистрация: 02.02.2012 Сообщений: 181 |
||||
01.10.2013, 16:57 |
5 |
|||
Сам новичок, если что поправьте, вполне возможно что ошибся)
Попробуйте это скомпилировать, увидите сами
0 |
1 / 1 / 0 Регистрация: 01.10.2013 Сообщений: 9 |
|
01.10.2013, 16:59 [ТС] |
6 |
А что делать если после введения переменных вылетает из проги?
0 |
Catstail Модератор 35427 / 19452 / 4071 Регистрация: 12.02.2012 Сообщений: 32,486 Записей в блоге: 13 |
||||
01.10.2013, 17:45 |
7 |
|||
А можно и без цикла:
0 |
TyLinka 34 / 34 / 21 Регистрация: 02.02.2012 Сообщений: 181 |
||||
01.10.2013, 17:54 |
8 |
|||
А что делать если после введения переменных вылетает из проги? вставьте перед return 0
0 |
Kofa 1 / 1 / 0 Регистрация: 01.10.2013 Сообщений: 9 |
||||
01.10.2013, 19:13 [ТС] |
9 |
|||
это задание только часть программы, но эта часть не получается, вот как я записал
}
0 |
34 / 34 / 21 Регистрация: 02.02.2012 Сообщений: 181 |
|
01.10.2013, 19:35 |
10 |
Сделайте “а” дробным типом
0 |
1 / 1 / 0 Регистрация: 01.10.2013 Сообщений: 9 |
|
01.10.2013, 20:01 [ТС] |
11 |
а теперь пишет ответ 0,5 но если считать самому то получается совсем по-другому
0 |
159 / 98 / 25 Регистрация: 07.03.2013 Сообщений: 512 Записей в блоге: 1 |
|
02.10.2013, 10:07 |
12 |
Kofa, ну написали же Вам готовый код уже несколько человек. Почему не взять его.
0 |
1 / 1 / 0 Регистрация: 01.10.2013 Сообщений: 9 |
|
02.10.2013, 18:08 [ТС] |
13 |
потому что я хочу понять,Ф а не просто скопировать, да и у меня почти тоже самое
0 |
TyLinka 34 / 34 / 21 Регистрация: 02.02.2012 Сообщений: 181 |
||||
03.10.2013, 04:24 |
14 |
|||
это задание только часть программы, но эта часть не получается, вот как я записал R = a / st; cout << “R=” <<R<< endl; У вас ошибка в расстановке квадратных скобок. Надо так:
system (“pause”) пишете в конце программы
0 |
-
Ты выполняешь цикл пока (counter3 == degree) при условии что после каждой итерации counter3 увеличивается, таким образом у тебя цикл будет выполнятся только при условии что счетчик равен степени и то один раз, то есть он будет срабатывать только если ты 2 возводишь в степень 2
-
В начале цикла у тебя стоит следующее result3 = number3, то есть ты на каждой итерации цикла результату присваиваешь введенное число.
немного подкорректированный твой код
let number3 = +prompt('Введите число');
let degree = +prompt('Введите степень');
let result3 = number3;
if (degree == 0) {
alert('Результат: 1');
} else if (degree == 1) {
alert('Результат: ' + number3);
}
while (degree > 1) {
// result3 = number3;
result3 = result3 * number3;
console.log(degree, result3);
degree = degree - 1;
}
alert('Результат: ' + result3);
более аккуратный вариант
const handlerDegree = (number, degree) => {
let result = 1;
while (degree) {
result = number * result;
degree = degree - 1;
}
return result;
};
const result = handlerDegree(2, 3);
alert(`Результат: ${result}`);
Или через рекурсию
function handlerDegree(number, degree) {
return degree ? number * handlerDegree(number, degree - 1) : 1;
}
alert(handlerDegree(5, 3));
p.s лучше использовать строгое сравнение === вместо ==
На занятии изучается алгоритм работы с циклом с предусловием While в Паскале, рассматривается пример возведения в степень
Содержание:
- While в Паскале — цикл с предусловием
- Вложенные циклы в Паскале
- Произведение в Паскале
- Программа возведения в степень числа в Паскале
Пример: Определить количество цифр в введенном целом числе, не превышающем 2000000.
Алгоритм: Отделяем и удаляем последовательно последнюю цифру, наращивая счетчик.
n | счетчик |
246 | 0 |
24 | 1 |
2 | 2 |
0 | 3 |
В чем сложность?: Заранее не определено и неизвестно, сколько цифр нужно убрать, т.е. сколько шагов необходимо сделать.
Как выполнить: Надо перестать отделять цифры, когда n = 0, т.е. надо выполнять пока n > 0
Блок-схема решения:
Блок-схема решения
Решение примера на Паскале:
Цикл while
в Паскале применяется для создания повторений с неизвестным заранее их числом. Повторения (итерации) будут осуществляться, пока истинно некоторое условие.
Блок-схема, соответствующая циклу while в Паскале:
while условие do {Пока условие истинно выполняется оператор} оператор;
- Здесь оператор, стоящий после служебного слова
do
, образует тело цикла и будет выполняться, пока значение"условия"
равноtrue
(истина). - Если операторов должно быть несколько, тогда необходимо применять составной оператор.
- Условие пересчитывается каждый раз при входе в цикл.
- Непосредственно
условием
циклаwhile
может быть переменная или логическое выражение. - Операторы тела цикла
while
выполнятся только в том случае, если условие будет истинно, если условие ложно — они игнорируются, и программа продолжается с тех операторов, которые стоят уже после конструкции. Таким образом, это существенное отличие цикла с предусловием от цикла с постусловием.
Рассмотрим использование цикла while
в Паскале на решенном примере:
Пример: Печатать «ноль» указанное количество раз
Показать решение:
Pascal | PascalABC.NET | ||||
|
|
Задача 3. Ввести целое число и найти сумму его цифр.
Пример:
Введите целое число: 1234 Сумма цифр числа 1234 равна 10.
[Название файла: L3task3.pas
]
Задача 4. Вычислять с использованием цикла while квадратные корни из чисел 900, 893, 886, 879 и т.д. до тех пор, пока это можно делать.
[Название файла: L3task4.pas
]
Детальный разбор работы цикла While в Паскале рассмотрен в видеоуроке:
Пример: найти сумму всех элементов последовательности:
которые по модулю больше 0,001:
Алгоритм:
Блок-схема решения:
Блок-схема решения
Решение на Паскале:
Решение на Паскале
Задача 5: Вычислить сумму элементов следующей последовательности с точностью 0,001:
Результат: S = 1.157
[Название файла: L3task5.pas
]
Вложенные циклы в Паскале
Существует возможность использования вложенных циклов в Паскале, когда в теле одного цикла вместо оператора стоит другой цикл.
Важно: Главным обстоятельством во вложенных циклах является использование разных переменных для счетчиков внутреннего и внешнего циклов
Рассмотрим пример:
Пример: Вывести таблицу умножения, используя вложенные циклы в паскале.
Показать решение:
Pascal | PascalABC.NET | ||||
|
|
Произведение в Паскале
Точно также, как существует сумматор для сложения, для умножения в паскале тоже существует специальная конструкция:
Произведение вычисляется по рекуррентному выражению:
P=P*Y,
где P – промежуточные произведения
Y — сомножители
Рассмотрим пример вычисления факториала числа в Паскале с использованием цикла while
.
Пример цикла While в Паскале для вычисления факториала 10! (10!=1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10)
1 2 3 4 5 6 7 8 9 10 11 12 |
var fact, n : integer; begin fact := 1; {начальное значение факториала =0! } n := 1; {начальное значение для условия } while n<=10 do {условие } begin {начало тела конструкции с составным оператором } fact := fact*n; {вычисление факториала n! } n := n + 1 {n должно меняться в теле конструкции} end; {конец тела цикла } writeln(’10!= ’,fact); {вывод результата расчета } end. |
Здесь необходимо обратить внимание на то, что присваивание n := 1
стоит до цикла, если этого не сделать, то условие будет работать некорректно, так как переменная n
будет пуста.
Программа возведения в степень числа в Паскале
Для начала уточним, что есть формула вычисления степени на Паскале. Но мы не будем ее использовать, а разберем алгоритм решения задачи возведения в степень.
Для того чтобы возвести число в степень, его надо умножить само на себя ровно столько раз, чему равен показатель степени.
Таким образом, возведение числа n
в степень d
можно выразить так:
nd = n1 * n2 * n3 * … * nd
, где нижние индексы просто указывают очередное по счету число n
.
Еще необходимо учесть следующее:
- число в нулевой степени равняется
1
- если показатель степени отрицателен, т.е.
d < 0
, то задача решается по формуле:
nd = 1 / (n1 * n2 * n3 * … * nd)
Т.е., решая программу на Паскале, учитываем:
- в программе на языке Паскаль количество итераций (повторений) цикла
while
должно быть равно показателю степени числа по модулю; - если показатель степени — отрицательное число, то нужно впоследствии единицу разделить на результат.
Задача 6. Вычислить в Паскале степень числа, используя цикл while.
[Название файла: L3task6.pas
]
Задача 7. Дана последовательность вещественных чисел, признак завершения которой — число 0 (оно не считается элементом последовательности). Найти сумму всех положительных элементов этой последовательности.
Пример результата:
Введите член последовательности 4 Введите член последовательности -1 Введите член последовательности 5 Введите член последовательности 7 Введите член последовательности 0 Сумма положительных чисел = 16
[Название файла: L3task7.pas
]
Назад в начало
Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
i = 0
while i < 5:
print(i)
i += 1
# Вывод:
>>> 0
>>> 1
>>> 2
>>> 3
>>> 4
Цикл while и цикл for имеют схожую структуру, НО есть одно важное различие – цикл while может быть бесконечным.
i = 0
while True:
print(i)
i += 1
# Вывод:
>>> 0
>>> 1
>>> 2
>>> 3
>>> 4
# Это может продолжаться долго…
Код выше будет бесконечно печатать возрастаютщую последовательность чисел.
Цикл while можно сравнить с цикличным условным оператором.
text = ‘Hello world’
i = 0
while i < len(text):
print(text[i])
i += 1
# Вывод:
>>> H
>>> e
>>> l
>>> l
>>> o
>>>
>>> w
>>> o
>>> r
>>> l
>>> d
Код, приведенный выше, печатает строку посимвольно. Приведу пример аналогичного цикла for:
text = ‘Hello world’
for i in text:
print(i)
# Вывод:
>>> H
>>> e
>>> l
>>> l
>>> o
>>>
>>> w
>>> o
>>> r
>>> l
>>> d
Более того, я приведу даже два цикла for!
text = ‘Hello world’
for i in range(len(text)):
print(text[i])
Напомню, что отличие между двумя, приведенными выше примерами, в следующем: первый цикл проходит по элементам последовательности (в нашем случае строки), а второй — по ее индексам. Здесь также используется функция len(), которая позволяет узнать длину последовательности.
Вернемся к циклу while. Цикл while, как и цикл for, можно остановить с помощью специальной управлющей конструкции break.
j = 0
while True:
if j == 3:
print(‘Выход из цикла’)
break
print(j)
j += 1
# Вывод:
>>> 0
>>> 1
>>> 2
>>> Выход из цикла
Конструкция break прерывает цикл. Она очень похожа на обычное условие после ключевого слова while.
Так же есть еще одна управляющая конструкция – continue. С ее помощью мы можем не выпонять текущую итерацию (повторение) цикла и перейти сразу к следующему.
j = 0
while j < 5:
j += 1
if j == 3:
print(‘Пропускаем j == 3‘)
continue
print(j)
# Вывод:
>>> 1
>>> 2
>>> Пропускаем j == 3
>>> 4
>>> 5
Как и для цикла for, для цикла while мы можем записать конструкцию else.
from random import randint
j = 0
element = randint(0, 15)
while j < 10:
j += 1
if j == element:
print(‘Нашли element, он равен’, element)
break
else:
print(‘Неудачная попытка’)
Примеры решения задач
Возведение числа в степень с помощью цикла while
n = int(input()) # число
k = int(input()) # степень
i = 1 # текущая степень
result = 1
while i <= k:
result *= n
i += 1
print(result)
Сумма последовательности с помощью цикла while
n = int(input())
result = 0
i = 0
while i <= n:
result += i
i += 1
print(result)
Ввод последовательности чисел
i = 0
while True:
n = input()
if n == ‘end’:
print(‘Ввод закончен’)
print(‘Было введено’, i, ‘чисел’)
break
n = int(n)
i += 1
Сумма введенных чисел
i = 0
summa = 0
while True:
n = input()
if n == ‘end’:
print(‘Ввод закончен’)
print(‘Было введено’, i, ‘чисел’)
print(‘Их сумма равна’, summa)
break
n = int(n)
summa += n
i += 1
Решение задач
1. Дано положительное число N. Вывести все числа от 0 до N с помощью цикла while.
2. Дано положительное число N. Вывести все числа от N до 0 с помощью цикла while. Пример:
Ввод: N = 10
Вывод: 10
9
8
7
6
…
0
3. Даны два положительных числа K и N (K < N). Вывести все числа от K до N с помощью цикла while.
4. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A (взятие остатка A % B)
5. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A (деление нацело A // B)
6. Дано положительное число N. Найти сумму всех четных чисел от 0 до N с помощью цикла while.
7. Даны два положительных числа K и N (K < N). Найти сумму всех нечетных чисел от K до N с помощью цикла while.
8. Дано положительное число N. Найти факториал числа N. Факториалом числа называется произведение всех чисел от 1 до N. Например, факториал числа 5 равен 5! = 1*2*3*4*5 = 120, 2! = 1*2 = 2, 9! = 1*2*3*4*5*6*7*8*9 = 362880
9. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести YES, если не является – вывести NO.
10. Дано целое число N (> 0). Найти двойной факториал N: N!! = N * (N-2) * (N-4)* …. Для решения этой задачи посмотрите на задачу 2
Сложные задачи
1. Дано целое число N (> 1). Найти наименьшее целое число K, при котором выполняется неравенство 3^K > N, где 3^K – это 3 в степени K или число 3, умноженное само на себя K раз. Например, 3^5 = 3*3*3*3*3. Ответом в задаче будет первая степень числа 3, которая больше, чем заданное число N. Например, если N=41, распишем степени числа три: 3^1 = 3; 3^2 = 3*3 = 9; 3^3 = 3*3*3 = 27; 3^4 = 3*3*3*3 = 27 * 3 = 81;. Таким образом, первая степень, в которую возвести число 3, превышающая число N – это 4.
В этой задаче нужно выполнять цикл while, пока остаток от деления на число три равен 0
2. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).
Перед решением этой задачи вспомните, как найти сумму цифр трехначного числа.
3. Даны целые положительные числа A и B. Найти их наибольший общий делитель (НОД), используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A.
4. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0 < P < 50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).
5. Дано целое число N (> 1). Последовательность чисел Фибоначчи FK определяется следующим образом: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1), K = 3, 4, …. Проверить, является ли число N числом Фибоначчи. Если является, то вывести TRUE, если нет – вывести FALSE.
6. Даны положительные числа A, B, C. На прямоугольнике размера A x B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.
7. Дано целое число N (> 1), являющееся числом Фибоначчи: N = F(K). Найти целое число K – порядковый номер числа Фибоначчи N.
Возвести, введенное с клавиатуры число, в степень n
, степень тоже вводится с клавиатуры. Возведение в степень организовать с использованием циклов.
Примечание: не использовать функцию pow
для нахождения степени. Результат работы программы показан на рисунке 1. Подсказка — используйте циклы, в частности — цикл for.
CppStudio.com
Enter number:
2
Enter power: 10
number = 1024
Рисунок 1 — Возведение числа в степень
// pow.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char* argv[]) { cout << "Enter number: " << endl; // введите число int numb; // число возводимое в степень cin >> numb; cout << "Enter power: "; // введите степень int power; cin >> power; int count = 1; // переменная отвечающая за истинность условия цикла do while int power_numb = numb; // результат возведения числа в степень do { if (power == 0) power_numb = 1; else if (power != 1 && power > 0) power_numb = power_numb * numb; // возводим в степень count++; // инкремент переменной-счётчика } while ( power > count); // проверка условия цикла do while cout << "number = " << power_numb << endl; // печать возведённого числа в степень system("pause"); return 0; }
Предлагаю вам иное решение задачи возведения в степень. Огромное спасибо автору этого решения, кстати, — это пользователь нашего сайта platin. Итак, код программы смотрим ниже:
#include <stdio.h> #include <iostream> using namespace std; int main(){ setlocale (LC_ALL, "RUS"); int a, n, rezult=1, i; cout<< "Введите возводимое в степень число: "; cin>>a; cout<< endl<< "Введите стень числа: "; cin>>n; for(i=0; i<n; i++) rezult *=a; cout<< endl<< "Результата возведения в степень "<<n<< " числа "<< a<< " = "<<rezult<< endl; return 0; }
Могу сказать, что данный исходник немного меньше предыдущего, возведение в степень выполняется тоже через цикл, но, цикл for. Возможно не хватает парочки проверок, но в целом решение правильное.
Добавил очередное решение задачи возведения числа в степень, которое предоставил нам — Алексей Нестерчук. Код программы показан ниже:
#include <iostream> using namespace std; int main() { int a, b, z; cout<< "Chislo: "<<endl; cin>>a; z = a; cout<<" Stepen: "<<endl; cin>>b; cout<<"--------"<<endl; for (int i = 1; i<b; i++ ){ a = a * z; cout<<a<<endl; } cin.get(); }
Пример работы последнего исходника. Особенность этого исходника в том, что возведение в степень отображается пошагово, это хорошо видно из примера. Поблагодарим Алексея Нестерчука за данный исходник.
CppStudio.com
Chislo: 2 Stepen: 10 -------- 4 8 16 32 64 128 256 512 1024