Процедура в Паскале

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Учусь
Сообщения: 5
Зарегистрирован: 12 янв 2010, 19:31

Дано натуральное число n. Среди чисел 1,2,…, n найти все те, которые можно представить в виде суммы квадратов 2-х натуральных чисел (Определить процедуру, позволяющую распознавать полные квадраты)
ну вот мне так кажется что должно быть так, но что то она не работает :(
Program proced;
uses crt;
var x,y,i,n,а:integer;
Procedure Kvadrat(i:real);
Begin
x:=0; y:=0;
for i:=1 to n do
For x:=1 to i do
For y:=1 to i do
end;
Begin
clrscr;
write ('Vvidite n=');
read (n);
if sqr(x)+sqr(y):=а then writeln (а);
Readln;
readln
end.
Заранее спасибо!!!
Newbie
Сообщения: 148
Зарегистрирован: 06 сен 2009, 19:45

дак у тя функция не вызывается, должно быть так(примерно, т.к. пишу прямо тут)

Код: Выделить всё

Program proced;
uses crt;


Procedure Kvadrat(a:integer);
var i,x,y: integer;
Begin
x:=0; y:=0;
for i:=1 to a do
For x:=1 to i do
For y:=1 to i do
if sqr(x)+sqr(y):=а then writeln (а);
end;

var n:integer;

Begin
clrscr;
write ('Vvidite n=');
readln (n);
Kvadrat(n);
Readkey;
end.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

for i:=1 to a do
For x:=1 to i do
For y:=1 to i do
if sqr(x)+sqr(y):=а then writeln (а);
Код будет искать не числа, удовлетворяющие условию, среди 1, 2... а, вместо этого он а раз проверит число а. Так что в последней строке должно быть
if sqr(x)+sqr(y):=i then writeln (i);
а лучше еще и break два раза вставить, чтобы перейти к другому числу.
Вместе с тем циклы можно значительно сократить: вместо
For x:=1 to i do
For y:=1 to i do
писать
For x:=1 to i-1 do
For y:=1 to x do
Иначе он, скажем, 25 определит дважды - как 4^2+3^2 и как 3^2+4^2
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Учусь
Сообщения: 5
Зарегистрирован: 12 янв 2010, 19:31

Вот хотела сказать вам СПАСИБО! Ну вроде кнопочка должна быть?! Но я ее не нашла... :confused: Ну во общем спасибо вам, начну переписывать ее на Си++. Если скажите где кнопка "Спасибо" нажму ее :) , ой т.е проголосую...жду когда вы скажите где эта кнопка!
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Теперь она имеет вид шестиконечной звезды внизу под ником.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Учусь
Сообщения: 5
Зарегистрирован: 12 янв 2010, 19:31

ну вот под своим ником я нашла шестиконечную звезду, но под вашими никами никакой звездочки НЕТ! есть треугольник с восклицательным знаком внутри и все.....может она от меня спряталась?! :) ))
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Видимо, вам надо иметь минимум 10 сообщений, чтобы выставлять репутацию другим пользователям.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
comando
Сообщения: 2
Зарегистрирован: 02 апр 2010, 20:54

Помогите, пожалуйста, решить вот такую задачку:
Дано: массивы А(5), B(7), C(9). Вычислить Y=K+M+N, где K-сумма элементов массива А со значением 1, N- сумма элементов массива B со значением 1, M- сумма элементов массива С со значением 1. Вычисление суммы элементов массива со значениями равными единице оформить в виде подпраграммы.
Учусь
Сообщения: 5
Зарегистрирован: 12 янв 2010, 19:31

Ну вот Я типа решила!! Она работает, но не факт что правильно :)
var y,k,m,n:integer;
procedure Summa;
var a:array[1..5] of integer;
b:array [1..7] of integer;
c:array [1..9] of integer;
i:integer;
BEGIN
randomize;
k:=0;m:=0;n:=0;
for i:=1 to 5 do
begin
a:=random(2);
writeln('a',a);
if a=1 then k:=k+a;
end;
for i:=1 to 7 do
begin
b:=random(2);
writeln('b',b);
if b=1 then m:=m+b;
end;
for i:=1 to 9 do
begin
c:=random(2);
writeln('c',c);
if c[i]=1 then n:=n+c[i];
end;
end;
begin
y:=0;
summa;
y:=k+m+n;
writeln('Y=',y);readln;
end.
comando
Сообщения: 2
Зарегистрирован: 02 апр 2010, 20:54

спасибо! :)
Правда программа, по моему, не очень правильно работает, но всё равно большое спасибо!
Попытаюсь найти ошибку.

P.S. может есть ещё варианты? :)
Ответить