Да се създаде програма за работа с масив от реални числа, в която след въвеждане на цяло положително число N (N<20) чрез функции се реализира следното:
- въвеждане на елементите на масива, N на брой
- запис на масива във файл
- прочитане на масива от файл
- намиране на сумата на първите N елементa
- намиране на броят на първите N ненулеви елементи
- намиране на стойността на най-малкия елемент
- намиране на номера на най-малкия елемент
Функциите да могат да се избират от меню. Масивът да бъде деклариран като глобална променлива.


с обяснения
program Project1; var a: array[1..20] of real; N, opcia: integer; //процедура за въвеждане procedure Vavejdane(N: integer); var i: integer; begin WriteLn('Vavedete ', N, ' na broi elementi.'); for i:=1 to N do ReadLn(a[i]); end; //процедура за запис във файл procedure Zapis(N: integer); var F: file of real; i: integer; chislo: real; begin WriteLn('Izbrahte da zapishete masiva vav fail.'); Assign(F, 'masiv.dat'); Rewrite(F); for i:=1 to N do begin chislo:=a[i]; Write(F, chislo); end; Close(F); end; //процедура за четене от файл procedure Prochit(N: integer); var F: file of real; i: integer; chislo: real; begin WriteLn('Izbrahte da prochetete masiva vav fail. Eto negovite elementi:'); Assign(F, 'masiv.dat'); Reset(F); for i:=1 to N do begin Read(F, chislo); WriteLn(chislo:0:0); end; Close(F); end; //функция за намиране на сумата на стойностите на елементите function Suma(N: integer): real; var i: integer; begin Result:=0; for i:=1 to N do Result:=Result+a[i]; end; //функция за намиране на броя на елементите function Broi(N: integer): integer; var i: integer; begin Result:=0; for i:=1 to N do if a[i]<>0 then Result:=Result+1; end; //функция за намиране на най-малката стойност в масива function StoinostMin(N: integer): real; var i: integer; begin Result:=a[1]; for i:=2 to N do if a[i]<Result then Result:=a[i]; end; //функция за намиране на номера на най-малката стойност в масива function NomerMin(N: integer):integer; var i: integer; chislo: real; begin chislo:=a[1]; Result:=1; for i:=2 to N do if a[i]<chislo then Result:=i; end; //самата програма с менюто begin Write('Vavedete chislo N<20, s koeto da rabotim:'); ReadLn(N); WriteLn; repeat WriteLn('Izberete opcia:'); WriteLn('1 - vavejdane na ', N, ' na broi elementi v masiva'); WriteLn('2 - zapis na masiva vav fail'); WriteLn('3 - prochitane na masiva ot fail'); WriteLn('4 - namirane na sumata na parvite ', N, ' elementa'); WriteLn('5 - namirane na broia na parvite ', N, ' nenulevi elementa'); WriteLn('6 - namirane na stoinostta na nai-malkia element'); WriteLn('7 - namirane na nomera na nai-malkia element'); WriteLn('0 - ako ne vi se zanimava poveche'); ReadLn(opcia); case opcia of 1: Vavejdane(N); 2: Zapis(N); 3: Prochit(N); 4: WriteLn('Sumata na stoinostta na elementite e ', Suma(N):0:0); 5: WriteLn('Broiat na nenulevite elementi e ', Broi(N)); 6: WriteLn('Stoinostta na nai-malkia element e ', StoinostMin(N):0:0); 7: WriteLn('Nomerat na nai-malkia element e ', NomerMin(N)); end; WriteLn('Gotovo. Natisnete Enter, za da prodaljite.'); ReadLn; WriteLn; until opcia=0; end.Отлично направена задача и добре обяснена! Но при записа на масива във файл може да ползваш и директно Write(F, a[i]);, а при четене от файла идеята е да се прочете в масива, а не да се изведе на екрана. :-) Другото е така.
program Project1; var a:array[1..20] of Real; N,i,o:integer; T:text; //въвеждане на елементите на масива, N на брой и запис на масива във файл Procedure VavediE(N,i:integer); begin Assign(T,'Dokument.txt'); Rewrite(T); Writeln('Vavedete chisla:'); for i:= 1 to N do begin Readln(a[i]); Write(T, a[i]); end; Writeln('Stop! Vavedohte dostatuchno chisla!'); Close(T); end; //прочитане на масива от файл Procedure ProchetiE(N,i:integer); begin Assign(T,'Dokument.txt'); Reset(T); Writeln('Chislata ot faila sa: '); for i:= 1 to N do begin Read(T,a[i]); Writeln(a[i]:5:2); end; Close(T); end; //намиране на сумата на първите N елементa function SumaE(N,i:integer):Real; begin for i:= 1 to N do begin Result:=Result+a[i]; end; Writeln('Sumata ot chislata e: ',Result:5:2); end; //намиране на броят на първите N ненулеви елементи function BroiNeO(N,i:integer):integer; begin Result:=0; for i:= 1 to N do begin if a[i]<>0 then Result:=Result+1; end; Writeln('Broq na chislata razlichni ot 0 sa: ',Result); end; //намиране на стойността на най-малкия елемент function NaiMalukE(N,i:integer):real; begin Result:=a[1]; for i:= 1 to N do begin if a[i]< Result then Result:=a[i]; end; Writeln('Nai-malkoto chislo e: ',Result:5:2); end; //намиране на номера на най-малкия елемент function NaiMalukN(N,i:integer):integer; var stoinost:real; begin Stoinost:=a[1]; Result:=1; for i:= 2 to N do if a[i] < Stoinost then Result:=i; Writeln('Nomera na nai-malkiq element e: ',Result); end; begin Writeln('Vavedete kolko elementa shte se vavejdat:'); Readln(N); Writeln; Writeln('Izberete operaciq za rabotata s masiv:'); Writeln('1 - vavejdane na elementi i zapisa ima na fail'); Writeln('2 - prochitane na masiva ot fail'); Writeln('3 - namirane na sumata na chislata'); Writeln('4 - namirane na broq na nenulevite elementi'); Writeln('5 - namirane na stoinostta na nai-malkiq element'); Writeln('6 - namirane na nomera na nai-malkiq element'); Writeln; Readln(o); case o of 1: VavediE(N,i); 2: ProchetiE(N,i); 3: SumaE(N,i); 4: BroiNeO(N,i); 5: NaiMalukE(N,i); 6: NaiMalukN(N,i); else Writeln('Nqma takava operaciq'); end; Readln; end.Браво, Светли, много добре! Само че за функциите, които връщат резултат, е по-добре само да върнеш резултата, а отпечатването да стане в главната програма – така функцията ще е по-универсална. Другото е чудесно направено…
program Project1; const N=10; var a:array [1..30] of integer; procedure MasivVavedi; var i:integer; begin Writeln('Vavedete Chislata na masiva'); For i:=1 to N do begin Readln(a[i]); end; end; procedure MasivZapisFail; var i:integer; F: file of integer; begin Assign(F,'chisla.dat'); Rewrite(F); for i:=1 to N do begin write(F,a[i]); end; for i:=1 to N do begin write(F,a[i]); end; close(F); end; procedure MasivProchitaneFail; var i:integer; F: file of integer; begin Assign(F,'chisla.dat'); Reset(F); for i:=1 to N do begin read(F,a[i]); end; close(F); end; Function Sumachisla:integer; var suma,i:integer; begin suma:=0; For i:=1 to N do begin suma:=suma+a[i]; end; Result:= Suma; end; Function Naimalkochislo:integer; var min,i:integer; begin min:=a[1]; for i:=2 to N Do If min > a[i] then min:=a[i]; Result:=min; end; Function Otkrivane:integer; var x,xi,i:integer; begin Write('Vavedete chisloto koeto tursite: '); Readln(x); xi:=-1; for i:=1 to N Do if a[i] = x then begin xi:=i;break; end; If xi= -1 then Writeln('chisloto ne e otkrito') else Writeln('Chisloto e s nomer: ',xi); end; begin MasivVavedi; MasivZapisFail; MasivProchitaneFail; WriteLn('Sumata e ', Sumachisla); Writeln('Nai-malkoto chislo e ', Naimalkochislo); Otkrivane; readln; end.Браво, Любо! Много добре е като код, само в процедурата MasivZapisFail имаш излишни редове. И си оправи форматирането – погледни решенията на другите колко по-лесно се четат! И във функцията Otkrivane може да подаваш търсеното число като параметър, а накрая вместо да отпечатваш резултата да го върнеш като резултат, а отпечатването да стане в главната програма. Така функцията ще стане по-универсална и ще може да се използва за различни числа и за други цели освен за извеждане на екрана.