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.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

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