Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачи
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
SLAX
Превет всем!
Я новичок в єтом деле , и както не задумывался весь учебный период что прийдется учить но вот пришла сесия и теперь надо по трудиться, начал сам изучать Паскаль, структуру написания его понял , єто не трудно.
Но вот математические алгоритмы для меня сложнее сделать,

ЛЮДИ кто неплохо програмирует пожалуйста помогите решить 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(c)
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, .... . Условный оператор не использовать.

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

ЗАРАНЕЕ ВСЕМ СПАСИБО КТО ОТВЕТИТ В ЭТОЙ ТЕМЕ.
мисс_граффити
1. смотри: общий вид слагаемого (N+i)^2, где i изменяется от 0 до n. (вот границы твоего цикла)
тебе надо посчитать сумму, то есть на каждом шаге к какой-то переменной (изначально она равна 0) прибавлять текущее слагаемое.
Сможешь написать?
Из переменных тебе понадобится:
n - задается пользователемж
sum - вычисляется
i - счетчик цикла, который будет использоваться и внутри скобок.

2. в поиск
-SLAX-
Цитата(мисс_граффити @ 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
Цитата
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.

мисс_граффити
Зачем тебе этот кусок:
if i<n then
for i:=0 to n do
i:=+n;

?
В цикле от 0 до n i ВСЕГДА меньше n
Вложенный цикл по той же переменной делать нельзя.
Изменять внутри цикла счетчик цикла тоже нельзя...
Гость
Цитата(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
Привіт! wink.gif
Цитата
Задача с массивом вот єа не работает.
Відает три нуля и предлагает ввести

Почему же не работает, чем тебе нули не угодили? Другое вопрос в том, что она и другого ничего не может вывести, так как в начале Паскаль сам обнуляет все элементы массива. Заполни массив числами перед циклом while , и увидишь, может она все-таки работает... wink.gif
-SLAX-
Цитата(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
[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-
Цитата(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
Цитата
Но в твоей программе даже если вести элементы массива программа не выдает номер числа в массиве который был кратны k. Вот смотри как я ее сделал

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

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

SLAX
Цитата(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 число есть экстремальным.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.