Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
1. Цикл for
1.1. Напечатайте таблицу умножения на 5. предпочтительно печатать 1 x 5 = 5, 2 x 5 = 10, а не просто 5, 10 и т.д.
1.2. Напечатайте в столбик нечетные числа от 3 до 25.
1.3. Напечатайте свое имя так, чтобы оно располагалось в углах окна вывода.
1.4. Выведите на экран таблицу значений синуса от 0 до 2*Pi. В каждой строке должны стоять один аргумент и одно значение. Количество значений аргумента пусть задает пользователь.
2. Прием накопления суммы
2.1. Напишите программу, которая вычисляет сумму квадратов чисел т 1 до N. Число N программа должна запрашивать у пользователя.
2.2. Напишите программу, перемножающую целые числа без использования операции «*». Например, при умножении целых чисел n*m число m надо сложить само с собой n раз (m+m+…+m).
2.3. Используя прием накопления суммы, найдите сумму нечетных чисел от 1 до N. Число N программа должна запрашивать у пользователя.
2.4. Выведите на экран последовательность сумм чисел от 1 до n. n меняется от 1 до 10. То есть первые члены последовательности: 1, 3 (1+2), 6 (1+2+3), 10 (1+2+3+4) и т.д.
2.5. Вычислите сумму элементов последовательности сумм из предыдущего задания.
2.6. Найдите сумму 100 синусов от аргументов в диапазоне от 0 до 2*Pi (из задачи 1.4).
3. Прием накопления произведения
3.1. Факториалом целого числа n (обозначается n!) называется произведение всех целых чисел от 1 до n. Напишите программу вычисления факториала введенного пользователем числа.
3.2. Напишите программу возведения числа в целую степень. Число и степень запрашивайте у пользователя.
4. Комбинация обоих приемов
4.1. Используя комбинацию обоих приемов, напишите программу, вычисляющую функцию
4.2. Вычислите сумму ряда:
Из мат. анализа известно, что . Выясните, на сколько 5-й и 10-й член последовательности таких сумм отличается от .
Следующий раздел:
Предыдущий раздел:
Ахренеть…
pomogite s nomerom 4.2. ne vihodit.
4.2 отличается от 4.1 только наличием факториала в знаменателе. Добавь вычисление факториалов (см. задачу 3.1) и дели на них каждое из слагаемых. Так будет проще всего.
Но это не самое лучше решение. Лучше получать сразу отношения вида . Обычный прием накопления произведения позволяет это сделать.
Что за задачи у Вас?!
Задачи сложные, для новичков просто нереaльны
По-моему, задачи чёткие!
Составлял на совесть, ошибок не заметил.
А если у студентов руки кривые — ничего поделать не могу
//Задачи сложные, для новичков просто нереaльны
Большинство моих студентов решали. К тому же по каждой теме они идут от совсем простых к более сложным. Хоть какие-то должны получиться.
da nebrashayte vnimae na eto,taras viktorovich,eto nashi dyryu mailis.a tak zadashki klasnie.4.2 vishel,v perviy raz delal kak vi i pisali,no da,eto ne variant.proshe sravnit kak geometricheskuy progressiy i polushiv eyo snamenatel progressii podstavit v uravnenie,tak proshe.
Вопрос, есть определённый оператор, который позволяет возводить x в n-ю степень ? Или можно как то более простым способом ?
всё понял) вопросов 0)
А если 4.2 не как прогрессию сделать, а вот таким способом. Будет ли он правильным ?
<Здесь был правильный ответ. Поэтому стерто ))
Taras>
<Здесь был правильный ответ. Поэтому стерто ))
Taras>
div даст только целую часть от деления, поэтому надо заменить его на «/». В остальном правильно.
Пара замечаний:
1) Аргумент экспоненты по-смыслу — вещественное число, так что не надо делать его integer’ом.
2) Вычисление степени и факториала в знаменателе можно совместить:
f := f * a/i;
Такая формула не только короче, но и точнее. В памяти компьютера хранится конечное число знаков после запятой. И на самом деле, чем больше число, тем больше абсолютная погрешность его компьютерного представления. В твоем варианте в качестве промежуточного результата возникают очень больше числа (факториал, большие степени). Для уменьшения погрешностей, больших чисел (если конечный результат сам не является большим числом) лучше избегать. Мой вариант позволяет это делать.
PS. Через несколько дней сотру ответ, чтобы не спойлерить.
Спасибо, учту, всё-таки такой способ намного короче.
Намекните 1.3, а то я совсем завис что-то.
Про экран со времен Borland Pascal осталось. В Pascal ABC надо помещать имя в углы окна вывода (исправил). Как-то так:
А как этого добиться — ну, сообрази )
Ну совсем никаких идей, сдаюсь.
Ну, пропускай и иди дальше. Конкретно эта задача не так уж и важна. Она больше на сообразительность, чем на усвоение какой-то серьезной программистской идеи. Хотя, соображать, как имеющимися ограниченными средствами добиться желаемого результата, конечно, полезно.
А ответ не дадите? А то я времени столько убил, интересно теперь.
А 2.1 можно же и без приема накопления суммы, да?
вот как-то так:
program summa;
var
N: integer;
begin
writeln(‘Vvedite N’);
readln(N);
writeln((N*(N+1)*(2*n+1))/6);
end.
Можно ))
Приятно встретить в вашем лице математически подкованного человека.
Спасибо, польщен. Надеюсь, я Вас не сильно загружаю.
2.3. Это нормально, что выдает все промежуточные рез-ты или я косячу?
Промежуточных результатов не должно быть, только окончательный ответ.
Тоже сломал голову над задачей 1.3 Но очень хочется понять как же ее решить. Помогите плиз.
Да ну, ничего особенного в ней нет. Есть write и writeln, которые печатают, что хочешь. Надо только сообразить, что именно напечатать, чтобы получилось имя по углам. Циклы здесь просто для сокращения текста программы, чтобы кучу раз одно и то же не писать.
В 1.3 размер окна вывода фиксированный?
1.3 Если задача с турбо паскаля, то там размер строки насколько со школы помню фиксированный. Значит в строку можно поместить опред. кол-во символов. Лично я проверил подгоняя циклом for i:=1 to n кол-во символов выводя еденицу, пока она не перенесётся по вертикали, так же пока не заскролица по горизонтали, вычел кол — во символов в моём имени и поправил цикл + сам вывод. Чувствую код ужасен и чувство что топором деланый.
var
i,n : integer;
name: string;
ch: char;
begin
name:=’Володя’;
ch:=’ ‘;
//for i:=1 to 104 do //
//write(1);
write(name);//печатаем имя (6 символов)
for i:=1 to 92 do //Отсчёт от напечатанных + оставить место для следующих 6 104 — 6 — 6 =92
write(ch); //печатаем 91 пробела
write(name);//печатаем имя
for i:=1 to 11 do
writeln(ch);
write(name);
for i:=1 to 92 do
write(ch);
write(name);
end.
Такое решение изначально и предполагалось. Код нормальный. Единственно, считается нехорошо использовать числовые константы (92, 11). Лучше бы осмысленные параметры, такие как ширина экрана и длина имени, записать в отдельные переменные и в циклах использовать выражения, составленные из этих переменных. Программа стала бы понятней и легче переделывалась бы под другие имена и размеры.
Тарас Викторович, в задании 2.6 требуется найти 100 синусов, значит должно быть 100 значений счетчик-переменная, но в диапазоне от 0 до 2*Pi не может быть 100 значений целого типа.
>> в задании 2.6 требуется найти 100 синусов, значит должно быть 100 значений счетчик-переменная, но в диапазоне от 0 до 2*Pi не может быть 100 значений целого типа.
Отсюда следует, что сама переменная счетчик не может служить аргументом синуса. Его нужно вычислять отдельно и тип он будет иметь вещественный. А как — надо придумать. В качестве намека — идущие через равный интервал 100 значений можно пронумеровать (от 1 до 100 или от 0 до 99, это уж, как захочешь). Каждому номеру будет соответствовать одно значение аргумента, значит, можно придумать функцию (формулу, выражение), которая по номеру будет вычислять аргумент.
Хотя, это не единственный возможный подход к решению. Можно думать и в других направлениях.
Помогите с 1.2
Посчитай, сколько требуется нечетных чисел. Сделай столько шагов цикла. В цикле можно или вычислять число по номеру шага или вычислять следующее нечетное число по предыдущему.
4.2
program ds;
var
i,b,x,n: integer;
s,r,d: real;
begin
readln(x,n);
b:=x;
r:=1;
d:=0;
for i:= 1 to n do
begin
r:=r*i;
x:=x*b;
d:=d+ (x/b)/r;
end;
writeln(1+d);
end.
Ирина, вот простое решение 1.2:
program zadacha_1_2;
var
i, b : integer;
begin
for i:=3 to 25 do
if odd(i) then
writeln (i)
end.
Так ли решается задача 1.3
var
Ivanov:string;
begin
writeln(‘Ivanov Ivanov’);
writeln(»);
writeln(»);
writeln(»);
writeln(»);
writeln(»);
writeln(»);
writeln(»);
writeln(‘Ivanov Ivanov’);
end.
Между фамилиями пробел где-то в 60 символов. Почему это не отобразилось.
данную задачу (1.3) решил тупо подбором количества пробелов в строке, может не надо ее так усложнять как предлагает Владимир?
Если правильно отразиться, то решила 4.2 после изучения следующей темы о Рекурентных соотношениях (до этого билась-билась — ничего не выходило)
program zadacha_4_2;
var
x, a, i: integer;
m, b, k: real;
function f(n:integer): integer;
begin
if n<=1 then f:=1
else f:=n*f(n-1); {вычисление n!}
end;
function s(n:integer): real;
begin
s:=exp(ln(x)*n); {вычисление x в n степени}
end;
begin
writeln ('введите количество чисел (элементов) последовательности, которые нужно просуммировать');
readln(a);
writeln ('введите число x');
readln(x);
m:=0;
b:=0;
for i:= 1 to a-1 do
begin
m:=s(i)/f(i);
b:=b+m;
end;
k:=1+b;
writeln(k);
end.
Предполагалось, что 4.1 — 4.2 решается комбинацией приемов накопления произведения (для степени и факториала) и накопления суммы.
так?
program zadacha_4_2;
var
i,x,n:integer;
p,m,r:real;
begin
writeln(‘укажите число x’);
readln(x);
writeln(‘укажите число n’);
readln(n);
m:=0;
p:=0;
r:=1;
for i:= 1 to n do
begin
p:=exp(ln(x)*i);
r:=r*i;
m:=m+p/r;
end;
writeln(1+m);
end.
Исправьте имя с Аноним на АленА, недосмотрела )
Степень тоже лучше накапливать.
var
i,n,a: integer;
y: real;
begin
write(‘n = ‘);
read(n);
for i:=1 to n do
begin
y:=2*Pi*i/n;
a:=(360 div n)*i;
writeln(‘a=’,a,’ ‘, ‘sin =’,(trunc(sin(y)*10000))/ 10000);
end;
end.
Задача 1.4. до 4-х значащих цифр
Решение:
var
i,n,a: integer;
y: real;
begin
write(‘n = ‘);
read(n);
for i:=1 to n do
begin
y:=2*Pi*i/n;
a:=(360 div n)*i;
writeln(‘a=’,a,’ ‘, ‘sin =’,(trunc(sin(y)*10000))/ 10000);
end;
end.
задача 2.6. сумма 100 синусов
var
i,n,a: integer;
y,s: real;
begin
write(‘n = ‘);
read(n);
for i:=1 to n do
begin
y:=2*Pi*i/n;
a:=(360 div n)*i;
s:=s+y;
writeln(‘a=’,a,’ ‘, ‘sin =’,(trunc(sin(y)*10000))/ 10000,’ ‘,’сумма’,i,’синусов = ‘,s);
end;
end.
Первая задача:
var
p:real;
i:integer;
begin
p:=1;
for i:=1 to 10 do
begin
p:=i*5;
writeln(i’* 5 = ‘,p);
end;
end.
1.3
))
Var z:integer;
begin;
writeln(‘Nord Nord’);
for z:=1 to 8 do
writeln(‘ ‘);
writeln(‘Nord Nord’);
end.
Для задачи 2.2 нужно вводить условный оператор на случай если множители отрицательные