Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задачи

Автор: SLAX 11.12.2006 1:05

Превет всем!
Я новичок в єтом деле , и както не задумывался весь учебный период что прийдется учить но вот пришла сесия и теперь надо по трудиться, начал сам изучать Паскаль, структуру написания его понял , єто не трудно.
Но вот математические алгоритмы для меня сложнее сделать,

ЛЮДИ кто неплохо програмирует пожалуйста помогите решить 3 задачи, я знаю для вас єто не составит труда а мне вы окажете большую услугу.

Вот выкладываю задачи.Они на таки вот темы на оператор : for. Потом по тему массивов : array. И minmax.

1. В єтой задаче я не пойму как составить мат. алгоритм
Дано целое число N (> 0).Найти сумму
N^2 + (N + 1)^2 + (N + 2)^2 + ... + (2*N)^2
N - (целое число).

То есть описываю как я понял ее алгоритм и строение
Вот
1. N>0, В=Експонента bn , bn=(2*N)^2/
2. Найти сумму.

Если что не так как я понял поправьте меня.

А теперь вот как я понял как надо написать код.

 
program for_11;
var c, b, N:integer;
begin
b:=0;
n:=0;
writeln ('Введите число');
readln©
for b:=1 to c do
b=b+(N+C)^2
if C<N then
C:=+1 " И надо что бы она вернулась опять в строчку b=b+(N+C)^2"
else
end.



вот мое представление , поправьте меня потому как программа не работает.
Вот пример пользователь водит 1 N=1 сума= 5
N=2 сума= 29
N=7 сума= 924

Всем заранее спасибо за ответ.

P.S. Пожалуйста модераторы не закрывайте тему потому как я действительно не пойму как решить данное задание.
Хотелось бы услышать помощь до завтра - послезавтра.




2. Дано целое число N и набор из целых чисел N. Найти номер первого экстремального ( то есть минимального и максимально ) элемента из даного набора.

3.Дан массив А размера N и целое число К (1 < K < N).ввывести элементы массива с порядковыми номерами, кратными K: AK, A2*K, A3*K, .... . Условный оператор не использовать.

Если не сложно то выложите код а если сложно то хотяб алгоритм и структуру прог.

ЗАРАНЕЕ ВСЕМ СПАСИБО КТО ОТВЕТИТ В ЭТОЙ ТЕМЕ.

Автор: мисс_граффити 11.12.2006 3:46

1. смотри: общий вид слагаемого (N+i)^2, где i изменяется от 0 до n. (вот границы твоего цикла)
тебе надо посчитать сумму, то есть на каждом шаге к какой-то переменной (изначально она равна 0) прибавлять текущее слагаемое.
Сможешь написать?
Из переменных тебе понадобится:
n - задается пользователемж
sum - вычисляется
i - счетчик цикла, который будет использоваться и внутри скобок.

2. в поиск

Автор: -SLAX- 11.12.2006 11:49

Цитата(мисс_граффити @ 10.12.2006 23:46) *

1. смотри: общий вид слагаемого (N+i)^2, где i изменяется от 0 до n. (вот границы твоего цикла)
тебе надо посчитать сумму, то есть на каждом шаге к какой-то переменной (изначально она равна 0) прибавлять текущее слагаемое.
Сможешь написать?
Из переменных тебе понадобится:
n - задается пользователемж
sum - вычисляется
i - счетчик цикла, который будет использоваться и внутри скобок.

2. в поиск


что значит будет использоваться внутри скобок ?
ну и вот что у меня получилось но что-то не то

 
program for_11;
var i, sum, n:integer;
begin
i:=0;
sum:=0;
writeln ('Ââåäèòå ÷èñëî');
readln(n);
for i:=0 to n do
begin
if i<n then
for i:=0 to n do
i:=+n;
sum:=sqr(N+i);
end;
writeln('Ñóììà',sum);
end.



ну и вот у меня ответі не совпадают с нужными.
Например я должен ввести один ответ должен быть 5 , а тут оно выдает 4.
Если 9 то 324 , а должэен быть 1905.

Мне кажется что я что-то упустил , так ли это



Автор: Bokul 11.12.2006 11:58

Цитата
3.Дан массив А размера N и целое число К (1 < K < N).ввывести элементы массива с порядковыми номерами, кратными K: AK, A2*K, A3*K, .... . Условный оператор не использовать.


const n=10;
var mas:array[1..n] of byte;
i,k:byte;
begin
i:=1;
k:=3;
while (i*k<=n) do
begin
writeln(mas[i*k]);
inc(i);
end;
readln;
end.


Автор: мисс_граффити 11.12.2006 14:34

Зачем тебе этот кусок:

if i<n then
for i:=0 to n do
i:=+n;

?
В цикле от 0 до n i ВСЕГДА меньше n
Вложенный цикл по той же переменной делать нельзя.
Изменять внутри цикла счетчик цикла тоже нельзя...

Автор: Гость 12.12.2006 12:31

Цитата(Bokul @ 11.12.2006 7:58) *


const n=10;
var mas:array[1..n] of byte;
i,k:byte;
begin
i:=1;
k:=3;
while (i*k<=n) do
begin
writeln(mas[i*k]);
inc(i);
end;
readln;
end.




Задача с массивом вот єа не работает.
Відает три нуля и предлагает ввести

1. РЕШИЛ
 
var
n, i: integer;
s:integer;
begin
write('N=');
readln(n);
s:=0;
for i:=n to 2*n do
begin
s:=s+sqr(i);
end;
writeln(s);
readln;
end.




2. А вот насчет второй

program min_max;
uses crt;
var i:integer;
m:array[1..30] of Real;
max:real;
t:integer;
begin
for i:=1 to 30 do
begin
writeln('Ââåäèòå ºëåìåíò ïîñëåäîâàòåëüíîñòè N',i);
readln(m[i]);
end;
max:=m[1];
t:=1;
for i:=1 to 30 do
if m[i]>max then
begin
max:=m[i];
t:=i;
end;
writeln(' Massiv ',m[i]);
writeln('Максимальный эл ',max);
writeln ('номер эл',t);
end.


Автор: Bokul 12.12.2006 12:55

Привіт! wink.gif

Цитата
Задача с массивом вот єа не работает.
Відает три нуля и предлагает ввести

Почему же не работает, чем тебе нули не угодили? Другое вопрос в том, что она и другого ничего не может вывести, так как в начале Паскаль сам обнуляет все элементы массива. Заполни массив числами перед циклом while , и увидишь, может она все-таки работает... wink.gif

Автор: -SLAX- 13.12.2006 0:53

Цитата(Bokul @ 12.12.2006 8:55) *

Привіт! wink.gif

Почему же не работает, чем тебе нули не угодили? Другое вопрос в том, что она и другого ничего не может вывести, так как в начале Паскаль сам обнуляет все элементы массива. Заполни массив числами перед циклом while , и увидишь, может она все-таки работает... wink.gif


Слушай спасибо smile.gif с твоей помощью задачу сдела вот выкладываю код
Но в твоей программе даже если вести элементы массива программа не выдает номер числа в массиве который был кратны k. Вот смотри как я ее сделал


program array;
uses crt;
const n=10
var a: array [0..10] of real;
k, i:integer;

begin
writeln(' Введите k ');
readln(k);
for i:=1 to n do
begin
writeln('Введите ' ,i, ' -й элемент массива ');
readln(a[i]);
end;
i:=k;
while i<=N do
begin
writeln (a [i]);
i:i+k;
end;
end.



Но вот задачу про массив где например пользователь вводит 10 єлементов массива и программа выводит на экран номер из массива числа который есть экстремальным то есть минимум ил максимум.
Например: 2 2 3 2 4 5 3 2 3 5
и пользователю выводит что это
10 элемент

Вот мои соображения насчет этого


program minmax;
uses crt;
const n=10
var a: array [0..10] of real;
i:integer;
tmp,tmp1: real;

begin
for i:=1 to n do
begin
writeln('Введите ' ,i, ' -й элемент массива ');
readln(a[i]);
end;
if a>a[i] then
a[i]=tmp;
else
a[i]=tmp1;
writeln ('Номер максимального числа в массиве', tmp );
writeln ('Номер минимального числа в массиве', tmp );

end.



но что сдесь моя логика подводит


Автор: arhimag 13.12.2006 1:03

[pascode] program minmax;

const n=10;
var a: array [0..10] of real;
i:integer;
tmp,tmp1: real;

begin
for i:=1 to 10 do
begin
writeln('Ââåäèòå ' ,i, ' -é ýëåìåíò ìàññèâà ');
readln(a[i]);
end;
tmp := -10000;
tmp1 := 10000;
for i:= 1 to 10 do begin
if tmp<a[i] then
tmp:=a[i];
if tmp1>a[i] then
tmp1:=a[i];
end;
writeln ('Íîìåð ìàêñèìàëüíîãî ÷èñëà â ìàññèâå', tmp );
writeln ('Íîìåð ìèíèìàëüíîãî ÷èñëà â ìàññèâå', tmp1 );
readln;
end. [/pascode]

Автор: -SLAX- 13.12.2006 4:24

Цитата(arhimag @ 12.12.2006 21:03) *

[pascode] program minmax;

const n=10;
var a: array [0..10] of real;
i:integer;
tmp,tmp1: real;

begin
for i:=1 to 10 do
begin
writeln('Ââåäèòå ' ,i, ' -é ýëåìåíò ìàññèâà ');
readln(a[i]);
end;
tmp := -10000;
tmp1 := 10000;
for i:= 1 to 10 do begin
if tmp<a[i] then
tmp:=a[i];
if tmp1>a[i] then
tmp1:=a[i];
end;
writeln ('Íîìåð ìàêñèìàëüíîãî ÷èñëà â ìàññèâå', tmp );
writeln ('Íîìåð ìèíèìàëüíîãî ÷èñëà â ìàññèâå', tmp1 );
readln;
end. [/pascode]


Очень большое спасибо, просто немного перепутал и значениям но можно спросить а можно так было чтобы оно выводило просто один номер любого экстремального числа( то есть будь то число минунимумом или максимум) просто программа выдавала что номер экстремального числа 10?

Еще раз огромное спасибо

Автор: Bokul 13.12.2006 4:46

Цитата
Но в твоей программе даже если вести элементы массива программа не выдает номер числа в массиве который был кратны k. Вот смотри как я ее сделал

Ну так добавь его вывод:

{-----------------------------------}
while i<=N do
begin
writeln (a [i]);
writeln(i);
i:=i+k;
end;
{-----------------------------------}


Автор: SLAX 13.12.2006 20:37

Цитата(arhimag @ 12.12.2006 21:03) *

[pascode] program minmax;

const n=10;
var a: array [0..10] of real;
i:integer;
tmp,tmp1: real;

begin
for i:=1 to 10 do
begin
writeln('Ââåäèòå ' ,i, ' -é ýëåìåíò ìàññèâà ');
readln(a[i]);
end;
tmp := -10000;
tmp1 := 10000;
for i:= 1 to 10 do begin
if tmp<a[i] then
tmp:=a[i];
if tmp1>a[i] then
tmp1:=a[i];
end;
writeln ('Íîìåð ìàêñèìàëüíîãî ÷èñëà â ìàññèâå', tmp );
writeln ('Íîìåð ìèíèìàëüíîãî ÷èñëà â ìàññèâå', tmp1 );
readln;
end. [/pascode]


слушайте а можно что бі программа выдавала только экстремальные числа то есть или минимальное число или максимальное число в этом массиве Например пользователь вводит 0 1 0 0 2 0 1 0 1 2
а программа выдает 10 число есть экстремальным.