PDA

View Full Version : Програмиране 9ти клас :)



Gabichkaaa
02-07-2011, 11:42
Работим по програмиране на Pascal, но г-жата ни даде задачи, които спадат повече към C++... Идея си нямам как да ги направя...

Например: 1. Дадено е естествено число N (n>=1). Да се напише програма, която намира сумата на тези елементи от серията числа i^3(chisloto 'i' na treta stepen demek) .. серията е i^3 - 3*i*n + n, i=12, ....n, които за кратни на 7...

2. Дадени са ест. числа m и n. Да се напише програма, която намира произведението n(n+m)(n+2m)(n+3m)......(n+m^2).

3. Да се напише програма, която извежда в обратен ред четните ест. числа, по-малки или равни на n. (помощ: с оператора 'down to').

Моля, моля, моля, моля! Имам нужда от помощта ви! :)

Foreverbg
02-07-2011, 13:58
За паскал не мога да ти помогна, мога само да ти обясня алгоритъма.

Chacho
02-07-2011, 16:23
Работим по програмиране на Pascal, но г-жата ни даде задачи, които спадат повече към C++... Идея си нямам как да ги направя...

Например: 1. Дадено е естествено число N (n>=1). Да се напише програма, която намира сумата на тези елементи от серията числа i^3(chisloto 'i' na treta stepen demek) .. серията е i^3 - 3*i*n + n, i=12, ....n, които за кратни на 7...

2. Дадени са ест. числа m и n. Да се напише програма, която намира произведението n(n+m)(n+2m)(n+3m)......(n+m^2).

3. Да се напише програма, която извежда в обратен ред четните ест. числа, по-малки или равни на n. (помощ: с оператора 'down to').

Моля, моля, моля, моля! Имам нужда от помощта ви! :)



1 задача

program asdf;

var

i,n,sum:=integer;

function SetMemb(a,b: integer): integer;
var
CheckMemb: integer;
begin
SetMemb:=0
CheckMemb:=a*a*a-3*a*b+b;
if (CheckMemb mod 7 = 0) then
SetMemb:=CheckMemb
end;

begin

writeln('Vuvedete chislo n>=1');
write('n=');
readln(n);

while (n<1) do
begin
writeln('Chisloto n trqbva da e po-golqmo ili ravno na 1');
write('n=');
readln(n);
end;

Sum:=0

for i := 1 to n do
begin
Sum:=SetMemb(i,n);
end;

writeln;
write('Sumata=',Sum);

end;




2зад.

program sdfa;

var

P,m,n,i,memb: integer;

begin

writeln('Vuvedete cqlo polojitelno n');
write('n=');
readln(n);

while (n<=0) do
begin
writeln('Chisloto n trqbva da e po-golqmo ot 0');
write('n=');
readln(n);
end;

writeln('Vuvedete cqlo polojitelno m');
write('m=');
readln(m);

while (m<=0) do
begin
writeln('Chisloto m trqbva da e po-golqmo ot 0');
write('m=');
readln(m);
end;


memb:=n;
P:=memb;

for i:=1 to m do
begin
memb:=memb+m;
P:=P*memb;
end;

writeln;
write('Proizvedenieto=',P);

end;




3 задача

program reversing;

var

i,n: integer

begin

writeln('Vuvedete cqlo polojitelno n');
write('n=');
readln(n);

while (n<=0) do
begin
writeln('Chisloto n trqbva da e po-golqmo ot 0');
write('n=');
readln(n);
end;

for i:=n downto 2 do
begin
if (i mod 2 = 0) then
write('i, ');
end;

end;


Не съм ги компилирал, така че сигурно имат синтактични грешки. Ако нещо не тръгват, пиши да ги погледна пак. Ако нещо не разбираш, питай!

Foreverbg
02-07-2011, 17:38
Защо навсякъде въвеждаш числата докато не се въведе отрицателно?

Chacho
02-07-2011, 18:21
Естествените числа са целите числа, по-големи от 0. А не се сещам как мога да го направя като unsigned int.

Foreverbg
02-07-2011, 18:27
Друго те питах. Исках да кажа, че няма смисъл от тези while, защото се въвежда 1 число, не докато се въведе отрицателно число. И щом в условието е дадено, че се въвеждам естествени числа, значи няма нужда да се прави проверка дали числото е естествено :)

Gabichkaaa
02-07-2011, 18:29
Май им схванах като цяло цаката ама има и по-лесни варианти.. Например на първата не е нужно SetMemb ами направо:


Var n,i,br,lmnt: Integer;

Begin
write('Въведи n: '); read(n);
for i:=1 to n do
begin
lmnt:=i*i*i-3*sqr(i)+n;
if lmnt mod 7 = 0 then br:=br+1;
end;
writeln('Броят е: ',br);
End.

Foreverbg
02-07-2011, 18:33
Не трябва ли да им намериш сумата не броя? Поне горе в условието така пише...

Chacho
02-07-2011, 18:37
Точно това си ме питал и е дадено в условието, че имаме естествено число, аз просто си осигурявам потребителят наистина да въведе такова. Не е хубаво да се разчита на този зад клавиатурата, защото винаги ще направи някаква каша. Разбира се че става и просто с един указателен текст и едно въвеждане, написал съм го по-сложно за да си налагам дисциплина.

Габичка, ти хубаво ги бройш, ама то се иска от теб да сметнеш сумата на елементите, а не да видиш колко са. Може да я махнеш функцията и да я направиш на променлива във програмата, както при задача 2, аз съм дал 2 варианта. Далеч не мисля, че изчерпвам всички варианти за решаване и ако се сетиш твой собствен -> чудесно за теб, разбрала си задачата и можеш сама да се справиш с нея.

Gabichkaaa
02-07-2011, 18:37
Мдааа... имаш право.. сега ще погледна пак! :) МНОГО БЛАГОДАРЯ И НА ДВАМА ВИ ЗА ПОМОЩТА! Задължена съм ви :-P

Gabichkaaa
02-07-2011, 18:48
Оу Оу.. аз съм ви дава друга задача.... Малко обърках номерацията... Извинявайте.. та за 1вата

Var n,i,br,lmnt,sum: Integer;

Begin
write('Въеди n: '); read(n);
sum:=0;
for i:=1 to n do
begin
lmnt:=i*i*i-3*i*n+n;
if (lmnt mod 2 = 0) and (not lmnt div 2 mod 2 = 0) then sum:=sum+lmnt;
end;
writeln('Сумата е: ',sum);
End.



Да, окай.. всичко е тип-топ.. сега ще погледна всички варианти на задачките... мерси много отново.. Имам още 3 задачки да погледна .. ще ви пиша при затруднение ако ви се занимава :)

Chacho
02-07-2011, 18:53
Това условие (not lmnt div 2 mod 2 = 0) сигурно ще ти генерира грешка. След not трябва да имаш булева променлива. Какво искаш да провериш, като разделиш на 2 члена на редицата, дали той е четен?

Gabichkaaa
02-07-2011, 18:55
Да... нали това ми е по условие...

Chacho
02-07-2011, 18:59
Е ти така и не публикува вярното условие, аз останах с впечатлението, че е кратно на 7. Ами махни това not, защо ти е?

Gabichkaaa
02-07-2011, 19:07
Нещо се оплетох .. с mod 2 търсим четно, но нали трябва да е кратно на 7.. демек затова има NOt

Chacho
02-07-2011, 19:10
a mod b = ostatyka ot delenieto a/b

10 mod 7 = 3

7 mod 7 = 0




a mod 7 = 0 Означава, че числото се дели на 7

a mod 2 = 0 Означава, че числото се дели на 2 или иначе казано - числото е четно

а mod 2 = 1 Означава, че числото не се дели на 2 или иначе казано - числото е нечетно.


Използвай a mod 7 = 0, за да проверяваш кратни ли са на 7

Gabichkaaa
02-07-2011, 19:15
Гррррррр..... сега ще пиша на г-жата... нещо се съмнявам в тая задача....

Gabichkaaa
02-07-2011, 19:28
задачата е сбъркала... тъпа работа..... дала от 2 задачи, една обща.... иначе другите си ги направих с ваша помощ.. много благодаряяяяяяяяяяяяяяяяя яяяяяяяяя :oops:

Chacho
02-07-2011, 19:31
Моля :)