Да се напише програма, която позволява:
- да се въведе число N и след това отпечатва нечетните числа от 1 до N и сумата им.
- да се въведат от клавиатурата N числа и отпечатва сумата на тези от тях, които са нечетни.
- да се въведат N числа и отпечатва сумата на тези с нечетен номер по реда на въвеждането – тоест на първото, третото, петото и т.н. числа.
Нарочно задавам три уж подобни като условие, но всъщност доста различни задачи. Помислете как може да бъде решена всяка от тях и вижте кое е общото и различното между решенията.


1. Да се въведе число N и след това отпечатва нечетните числа от 1 до N и сумата им.
VAR n,i,suma : integer; BEGIN write('vavedi n: '); readln(n); suma:=0; for i:=1 to n do begin if ((i mod 2 <> 0) or (i=1)) then writeln(i); end; readln; END.2. Да се въведат от клавиатурата N числа и отпечатва сумата на тези от тях, които са нечетни.
VAR n,i,suma : integer; BEGIN write('vavedi n: '); readln(n); suma:=0; for i:=1 to n do begin if ((i mod 2 <> 0) or (i=1)) then suma:=suma+i; end; writeln('sumata na nechetnite chisla e ',suma); readln; END.3. Да се въведат N числа и отпечатва сумата на тези с нечетен номер по реда на въвеждането – тоест на първото, третото, петото и т.н. числа.
VAR n,i,suma,chislo : integer; BEGIN write('kolko chisla shte vavejdate: '); readln(n); suma:=0; for i:=1 to n do begin write('vavedi chislo: '); readln(chislo); if (i mod 2 0) then suma:=suma+chislo; end; writeln(suma); readln; END.Калояне, първото решение не пресмята и не отпечатва сумата на числата. Във второто – не позволяваш да се въведат числа, нито ги сумираш. В третото решение си пропуснал знака за различно.
Освен това няма нужда да проверяваш дали (i=1). (i mod 2 <> 0) ще включи и него.
VAR i , suma , n : integer; Writeln('Vavedete n:'); readln(n); suma:=0 for i:=1 to n do begin if((i mod 2 <> 0) or (1=1)) then end Readln; end.Лора, в твоето решение няма нито събиране на числата, нито отпечатване на сумата.
1. Да се въведе число N и след това отпечатва нечетните числа от 1 до N и сумата им.
VAR n,i,suma : integer; BEGIN write('vavedi n: '); readln(n); suma:=0; for i:=1 to n do begin if (i mod 2 <> 0) then begin writeln(i); suma:=suma+i; end; end; writeln('sumata na nechetnite chisla v intervala ot 1 do ',n,' e ',suma); readln; END.2. Да се въведат от клавиатурата N числа и отпечатва сумата на тези от тях, които са нечетни.
VAR n,i,suma,chislo : integer; BEGIN write('vavedi n: '); readln(n); suma:=0; for i:=1 to n do begin write('vavedi chislo: '); readln(chislo); if (chislo mod 2 <> 0) then suma:=suma+chislo; end; writeln('sumata na vavedenite nechetni chisla e ',suma); readln; END.3. Да се въведат N числа и отпечатва сумата на тези с нечетен номер по реда на въвеждането – тоест на първото, третото, петото и т.н. числа.
VAR n,i,suma,chislo : integer; BEGIN write('kolko chisla shte vavejdate: '); readln(n); suma:=0; for i:=1 to n do begin write(i,': '); readln(chislo); if (i mod 2 <> 0) then suma:=suma+chislo; end; writeln('sumata na chislata na nechetnite redove e ',suma); readln; END.ПП: Съжалявам, че бях объркал задачите, но не съм чел условията както трябва :)
Няма проблем. Сега вече съм съгласен с решенията, и трите. Браво!
program Project1; var m,s:integer; n,i:real; begin write('wawedi kraino chislo N: '); readln(n); m:=1; s:=trunc(n); if ((s mod 2) > 0) then begin n:=n+1; i:=n/2; repeat m:=m+2; writeln(m:26); until (m=(n-1)); end; if ((s mod 2)=0) then begin i:=n/2; repeat m:=m+2; writeln(m:27); until (m=(n-1)); end; writeln('sumata na nechetnite e: ',i*i:0:0); readln; end.Сметнах, че ще е добре да я реша по друг начин след като видях горните решения.
Ще добавя решенията на другите две условия по-късно.
Калояне, много се радвам, че се включваш с решение, при това толкова оригинално! Ще ми е интересно да видя и другите две.
По това решение – имаш малка грешка – не започва от 1, а от 3. Другото е, че програмата изглежда прекалено сложна. За да се опрости, гледаш кои са общите неща в двата if-а и ги изнасяш извън тях. Ето:
program Project1; var m,s:integer; n,i:real; begin write('wawedi kraino chislo N: '); readln(n); m:=-1; s:=trunc(n); if ((s mod 2) > 0) then n:=n+1; i:=n/2; repeat m:=m+2; writeln(m:26); until (m=(n-1)); writeln('sumata na nechetnite e: ',i*i:0:0); readln; end.Може дори и още да се опрости, ако се използва div.
Включвам се с решенията на останалите 2 условия:
2.
program chisla2; var a,b,i,m:integer; begin write('wawedi broq na chislata za wuwejdane: '); readln(a); m:=0; i:=0; repeat begin m:=m+1; write('wawedi chislo: '); readln(b); if ((b mod 2) > 0) then i:=i+b; end; until m=a; writeln('sumata na nechetnite ot ',a,' chisla e: ',i); readln; end.3.
program chisla3; var a,b,i,m:integer; begin write('wawedi broq na chislata za wuwejdane: '); readln(a); m:=1; i:=0; repeat begin write('wawedi chislo: '); readln(b); if ((m mod 2) <> 0) then i:=i+b; m:=m+1; end; until m=(a+1); writeln('sumata na nechetnite po red na wudejdane ot ',a,' chisla e: ',i); readln; end.Калояне, верни са и двете. Ако мога да дам някакви препоръки за подобряване на програмите, то: кода на програмата ще е по-лесен за четене, ако използваш цикъл for вместо repeat/until – след като са поредни стойности с фиксирано начало и край, цикъла for е точно за това. Ако сложиш и говорящи имена на променливите, програмата сама ще обяснява за какво е и какво прави :-)