Pereiti prie turinio

pascal uzduotis(string)


Rekomenduojami pranešimai

Sveiki, reikia pagalbos sprendziant sita uzduoti:

klaseje yra n mokiniu, is kuriu kiekvienas per pusmeti gavo np pazymiu. parasykite programa, kuri surastu keli ir kas is mokiniu yra pirmunai(kuriu pazymiai 9 ir 10).

 

prgrm.txt

 

stai ka pavyko kolkas parasyti. Koki algoritma parasyti tam, kad isvestu k - pirmunu skaicius ir ju vardus su pavarde?

Redagavo Radicon
Nuoroda į pranešimą
Dalintis kituose puslapiuose

program Mokiniai;
type pazymiai = array[1..15] of integer;
    mokinys = record
   pirmunas,
   mokinys : string[20];// mokinio vardas ir pavarde
   PAZ : pazymiai  //masyvas kiekvieno pazymiams
   end;
   masyvas = array [1..20] of mokinys;
   var n, tsum, p : integer;
       v : real;
       A : masyvas;
{---------procedura failo nuskaitymui------------------------------------------}
procedure skaitymas;
var fd : text;
   i, j : integer;
begin
   assign(fd, 'Duom2.txt');
   reset(fd);
   readln(fd, n, p, v);
   for i := 1 to n do
       begin
           read(fd, A[i].mokinys);
               for j := 1 to p do
                   read(fd, A[i].PAZ[j]);
           readln(fd);
       end;
   close(fd);
end;
{------------------Pažymių aritmetinio vidurkio skaičiavimo funkcija-----------}
function vid (G : pazymiai): real;
var i : integer;
begin
   vid := G[1];
   for i := 2 to p do
       vid += G[i];
   vid := vid / p;
end;
{-------------Pirmūnų skaičiaus radimo funkcija--------------------------------}
function pirmunai : integer;
var i : integer;
begin
   pirmunai := 0;
   for i := 1 to n do
       if v < vid (A[i].PAZ)
           then pirmunai += 1;
end;
{------------Rezultatų rašymo į failą procedūra--------------------------------}
procedure rasymas;
var fr : text;
   i : integer;
begin
   assign(fr, 'Rez2.txt');
   rewrite(fr);
   for i := 1 to n do
       writeln(fr, A[i].mokinys, ' ', vid(A[i].PAZ):2:1);
   writeln(fr, pirmunai);
   close(fr);
end;
begin
 skaitymas;
 rasymas;
end.

jei ne ta programa tai bent labai panaši, pasitaisyk pagal savo užduoti, jei ne tokia, tiek manau turėtum mokėt. :) Jei ne tai parašyk pataisysiu :D

 

o koda reikėtu patobulint, nes čia pernai rašyta, kai paskalis dar buvo nesenai pradėtas mokytis, tai ir stilistikos ir šiaip tokiu nesamonių matau, bet pasitaisyk pats jei gali :rolleyes:

Redagavo agnek21
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki dar karta :)

pavyko parasyti tiktai tai, bet nevisiskai atitinka reikalavimus.

 

Filtro fukcijoj kazkas neveikia, nes visada raso kad tik 1 pirmunas (padekit rasti klaida) ir ka reikia parasyti, kad isvestu ne tik pirmunu skaiciu bet ir ju vardus ir pavardes. Is anksto dekui :)

 

program pirmunai;
type pazymiai=array [1..100] of integer;
    mokinys=record
    varpav:string[25];
    paz:pazymiai;
    end;
    mokiniai=array [1..40] of mokinys;
var psum,n,np:integer;
   mok:mokiniai;
{-----------------skaitymo procedura-------------------------------------------}
procedure reading;
var i,j:integer;
begin
 writeln('kiek klaseje yra mokiniu?');
 readln(n);
 writeln('kiek pazymiu gavo kiekvienas?');
 readln(np);
 for i:=1 to n do
   begin
   read(mok[i].varpav);
     for j:=1 to np do
      readln(mok[i].paz[j]);
   end;
end;
{-----------------Filtro funkcija----------------------------------------------}
function filter:integer;
var i,j,k:integer;
begin
for i:=1 to n do
begin
  for j:=1 to np do
    if (mok[i].paz[j]>=9) then k:=k+1;
    if k=np then psum:=psum+1;
    k:=0;
end;
end;
{-----------------------rasymo procedura---------------------------------------}
procedure onscreen;
var i:integer;
begin
Writeln('klaseje yra ',psum,' pirmunu');
readln(psum);
end;

begin
reading;
filter;
onscreen;
end.

Redagavo Radicon
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dabar rašys gerai, bet programą galima daug trumpiau ir tvarkingiau parašyti. Procedūros ir funkcijos niekur taip nenaudojamos kaip parašei.

program pirmunai;
type pazymiai=array [1..100] of integer;
	mokinys=record
	varpav:string[25];
	paz:pazymiai;
	end;
	mokiniai=array [1..40] of mokinys;
var n,np:integer;
mok:mokiniai;
{-----------------skaitymo procedura-------------------------------------------}
procedure reading;
var i,j:integer;
begin
writeln('kiek klaseje yra mokiniu?');
readln(n);
writeln('kiek pazymiu gavo kiekvienas?');
readln(np);
for i:=1 to n do
begin
   	writeln('įveskite mokinio vardą');
   	read(mok[i].varpav);
   	writeln('įveskite pažymus');
   	for j:=1 to np do
   	readln(mok[i].paz[j]);
end;
end;
{-----------------Filtro funkcija----------------------------------------------}
function filter:integer;
var i,j,k:integer;
begin
k:=0;
for i:=1 to n do
   	for j:=1 to np do
   	if(mok[i].paz[j]>=9) then
   	begin
       	k:=k+1;
       	break;
   	end;
filter:=k;
end;
{-----------------------rasymo procedura---------------------------------------}
procedure onscreen;
var i,j:integer;
begin
Writeln('klaseje yra ',filter,' pirmunu');
writeln('klasės pirmunai: ');
for i:=1 to n do
   	for j:=1 to np do
   	if(mok[i].paz[j]>=9) then
   	begin
       	writeln(mok[i].varpav);
       	break;
   	end;
end;

begin
reading;
filter;
onscreen;
readln;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dekui uz pagalba :)

 

Del tvarkingumo, tai cia ne galutine versija :) cia kolkas sau pasirasiau :) Be to, esu tik pradedantysis :)

 

Procedūros ir funkcijos niekur taip nenaudojamos kaip parašei.

 

Tada is karto sekantys klausymas: kaip naudojamos proceduros ir funkcijos? Gal galetum konkretu pavyzdi pateikti? Paaiskink, kaip naujokui :)

Redagavo Radicon
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Del programos - ne visai taip kaip reikia isveda. Jeigu pavyzdziui gavo po 5 pazymius, tai visi 5 pazymiai turi buti 9 arba 10.

 

pradiniai duomenys:

 

Jonas jonaitis 10 9 9

Petra petraitis 5 8 9

juozas juozapivicius 4 3 9

ugnius ugninis 9 10 10

 

Atsakymas turetu buti:

klaseje yra 2 pirmunai: jonas jonaitis, ugnius ugninis

 

o dabar isveda visus pas ka yra nors vienas 9 ar 10 :) pateiktame pavyzdyje isvestu 4 pirmunus :)

 

Manau aiskia paaiskinau ko man reikia :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ne taip sąlyga supratau

tavo variantas veiks dabar

program pirmunai;
type pazymiai=array [1..100] of integer;
   	mokinys=record
   	varpav:string[25];
   	paz:pazymiai;
   	end;
   	mokiniai=array [1..40] of mokinys;
var n,np:integer;
   	mok:mokiniai;
{-----------------skaitymo procedura-------------------------------------------}
procedure reading;
var i,j:integer;
begin
   	writeln('kiek klaseje yra mokiniu?');
   	readln(n);
   	writeln('kiek pazymiu gavo kiekvienas?');
   	readln(np);
   	for i:=1 to n do
   	begin
   	writeln('įveskite mokinio vardą');
   	read(mok[i].varpav);
   	writeln('įveskite pažymus');
   	for j:=1 to np do
   	readln(mok[i].paz[j]);
   	end;
end;
{-----------------Filtro funkcija----------------------------------------------}
function filter:integer;
var i,j,k,psum:integer;
begin
   	k:=0; psum:=0;
   	for i:=1 to n do
   	begin
       	for j:=1 to np do
       	begin
           	if(mok[i].paz[j]>=9) then k:=k+1;
           	if k=np then psum:=psum+1;
       	end;
       	k:=0;
   	end;
   	filter:=psum;
end;
{-----------------------rasymo procedura---------------------------------------}
procedure onscreen;
var i,j,k:integer;
begin
   	Writeln('klaseje yra ',filter,' pirmunu');
   	writeln('klasės pirmunai: ');
   	k:=0;
   	for i:=1 to n do
   	begin
       	for j:=1 to np do
       	if(mok[i].paz[j]>=9) then k:=k+1;
       	if k=np then writeln(mok[i].varpav);
       	k:=0;
   	end;
end;

begin
reading;
filter;
onscreen;
readln;
end.

Galima ir kiti būdai skaičiavimo, vienas pvz vidurkius suskaičiuoji ir jei vidurkis didesnis ir tada jis pirmūnas.

Galima tavo kodą sutrumpinti jei nėra reikalavimų kokių nors procedūrų, funkcijų naudojimo..

 

O dėl procedūros ir funkcijos naudojimo gali rasti google.lt o trumpai procedūra naudojama kai nori perduoti keletą rezultatų.

program Bevardė3;

procedure SumaSandaug(a,b:integer; var suma,sandauga:integer);
begin
suma:=a+b;
sandauga:=a*b;
end;
var suma,sandauga:integer;
begin
SumaSandaug(5,5,suma,sandauga);
writeln(suma,' ',sandauga);
Readln;
end.

 

Funkcija rašoma kai norima perduoti vieną rezultatą.

program Bevardė3;

function Suma(a,b:integer):integer;
begin
Suma:=a+b;
end;

begin
writeln(Suma(5,5));
Readln;
end.

 

Dažniausiai reikalaujama pačioje funkcijoje aprašyti kintamuosius, pagrindinius kintamuosius po procedūromis pačioje programuoja ir kintamuosius perduoti reikia, o ne juos aprašyti ir naudoti globaliai.

Redagavo wigas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dekui uz paaiskinimus :) bandysiu pataisyti savo klaidas :)

 

P.S. Viskas veikia dabar :)

Ne taip sąlyga supratau

tavo variantas veiks dabar

program pirmunai;
type pazymiai=array [1..100] of integer;
   	mokinys=record
   	varpav:string[25];
   	paz:pazymiai;
   	end;
   	mokiniai=array [1..40] of mokinys;
var n,np:integer;
   	mok:mokiniai;
{-----------------skaitymo procedura-------------------------------------------}
procedure reading;
var i,j:integer;
begin
   	writeln('kiek klaseje yra mokiniu?');
   	readln(n);
   	writeln('kiek pazymiu gavo kiekvienas?');
   	readln(np);
   	for i:=1 to n do
   	begin
   	writeln('įveskite mokinio vardą');
   	read(mok[i].varpav);
   	writeln('įveskite pažymus');
   	for j:=1 to np do
   	readln(mok[i].paz[j]);
   	end;
end;
{-----------------Filtro funkcija----------------------------------------------}
function filter:integer;
var i,j,k,psum:integer;
begin
   	k:=0; psum:=0;
   	for i:=1 to n do
   	begin
       	for j:=1 to np do
       	begin
           	if(mok[i].paz[j]>=9) then k:=k+1;
           	if k=np then psum:=psum+1;
       	end;
       	k:=0;
   	end;
   	filter:=psum;
end;
{-----------------------rasymo procedura---------------------------------------}
procedure onscreen;
var i,j,k:integer;
begin
   	Writeln('klaseje yra ',filter,' pirmunu');
   	writeln('klasės pirmunai: ');
   	k:=0;
   	for i:=1 to n do
   	begin
       	for j:=1 to np do
       	if(mok[i].paz[j]>=9) then k:=k+1;
       	if k=np then writeln(mok[i].varpav);
       	k:=0;
   	end;
end;

begin
reading;
filter;
onscreen;
readln;
end.

Galima ir kiti būdai skaičiavimo, vienas pvz vidurkius suskaičiuoji ir jei vidurkis didesnis ir tada jis pirmūnas.

Galima tavo kodą sutrumpinti jei nėra reikalavimų kokių nors procedūrų, funkcijų naudojimo..

 

O dėl procedūros ir funkcijos naudojimo gali rasti google.lt o trumpai procedūra naudojama kai nori perduoti keletą rezultatų.

program Bevardė3;

procedure SumaSandaug(a,b:integer; var suma,sandauga:integer);
begin
suma:=a+b;
sandauga:=a*b;
end;
var suma,sandauga:integer;
begin
SumaSandaug(5,5,suma,sandauga);
writeln(suma,' ',sandauga);
Readln;
end.

 

Funkcija rašoma kai norima perduoti vieną rezultatą.

program Bevardė3;

function Suma(a,b:integer):integer;
begin
Suma:=a+b;
end;

begin
writeln(Suma(5,5));
Readln;
end.

 

Dažniausiai reikalaujama pačioje funkcijoje aprašyti kintamuosius, pagrindinius kintamuosius po procedūromis pačioje programuoja ir kintamuosius perduoti reikia, o ne juos aprašyti ir naudoti globaliai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...