Pereiti prie turinio

Pascal vbe uždavinys


Rekomenduojami pranešimai

Parašiau 2009 metų informacinių technologijų vbe pirmą praktinę užduotį "Mainai":

program VBE_2009_1praktineuzduotis_Manai;
//--------------------------------------------------------------
type masyvo_atsakos = record
              nominalai:integer;
              monetos:integer;
              end;
    masyvas = array[1..50] of masyvo_atsakos;
var
   gilija,eglija:masyvas;
   suma_gilija,suma_eglija,n_gilija,n_eglija:integer;
//--------------------------------------------------------------
function pinigu_suma(suma:masyvas):integer;
var
   sum,k:integer;
begin
   sum:=0;
   for k:=1 to 50 do
   begin
    sum:=sum+(suma[k].nominalai*suma[k].monetos);
   end;
   pinigu_suma:=sum;
end;
//--------------------------------------------------------------
procedure nuskaitymas;
var i,y,g,j:integer;
   failas:text;
begin
   assign(failas, 'U1.txt');
   reset(failas);
   readln(failas, n_gilija);

   for i:=1 to n_gilija do
    begin
    read(failas, gilija[i].nominalai);
    end;
   readln(failas);

   for y:=1 to n_gilija do
    begin
    read(failas, gilija[y].monetos);
    end;
   readln(failas);

   readln(failas, n_eglija);
   for g:=1 to n_eglija do
    begin
    read(failas, eglija[g].nominalai);
    end;
   readln(failas);

   for j:=1 to n_eglija do
    begin
    read(failas, eglija[j].monetos);
    end;
   close(failas);
end;
//--------------------------------------------------------------
procedure rezultatai;
var x,atsakymai,monetu_suma:integer;
   irasymas:text;
begin
   assign(irasymas, 'U1rez.txt');
   rewrite(irasymas);
   atsakymai:=0;
   monetu_suma:=0;
   for x:=1 to n_eglija do
    begin
    atsakymai:=suma_gilija div eglija[x].nominalai;
    suma_gilija:=suma_gilija - eglija[x].nominalai * atsakymai;
    monetu_suma:=monetu_suma+atsakymai;
    write(irasymas, eglija[x].nominalai,' ',atsakymai);
    writeln(irasymas);
    end;
    writeln(irasymas, monetu_suma);

   atsakymai:=0;
   monetu_suma:=0;
   for x:=1 to n_gilija do
    begin
    atsakymai:=suma_eglija div gilija[x].nominalai;
    suma_eglija:=suma_eglija - gilija[x].nominalai * atsakymai;
    monetu_suma:=monetu_suma+atsakymai;
    write(irasymas, gilija[x].nominalai,' ',atsakymai);
    writeln(irasymas);
    end;
    writeln(irasymas, monetu_suma);
    close(irasymas);
end;
//--------------------------------------------------------------
begin
   nuskaitymas;
   suma_gilija:=pinigu_suma(gilija);
   suma_eglija:=pinigu_suma(eglija);
   rezultatai;
   readln;
end.

 

Viskas veikia puikiai, tik noriu paklausti, gal turi kokių pastebėjimų pačiame programos rašymo stiliuje? Ar parašius tokią programą per VBE ji būtų užskaitoma kaip visiškai atlikta?

 

Reikalavimuose nurodyta:

"Programoje būtinai naudokite vienmačius masyvus." (juk su record tai vienmatis, tiesa?)

"Programoje neturi būti sakinių, skirtų darbui su ekranu." (nėra)

"Parašykite funckiją, kuri suskaičiuotų, kokią sumą pinigų keičia studentas." (parašiau, veikia)

 

Ir paskutinis klausimas, juk nebūtina rašyti programą apsirašant konstantas?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Mano pastebėjimai:

1. Programos pavadinimą moko rašyti tik ‚Mainai‘.

2. Nuskaitymo procedūra visada turi būti prieš funkcijas(programos pradžioje).

3. Funkciją galima iškviesti į procedūrą.(Nors manau tai ne taip svarbu).

4. Pagrindinės programos pabaigoje parašyta 'readln', sakė kad tai skaitosi kaip darbas su ekranu.

5. Po ciklo, jei vykdomas tik viena eilutė, nereikia 'begin' ir 'end'.(Tik apkrauni darbu programą)

O dėl komentavimo tai mums visada sako rašyti ką daro funkcijos ir procedūros

, o dėl kintamųjų komentavimo tai, manau, kad tavo programoje tai nėra būtina, nes kintamieji yra ne raidėmis o žodžiais. Jei pvz. vietoj 'monetu_suma' būtų ms reiktų komentuot, kad ms-monetų suma.

čia pakoreguota kaip atrodo:

 

program Manai;
type masyvo_atsakos = record
              nominalai:integer;
              monetos:integer;
              end;
    masyvas = array[1..50] of masyvo_atsakos;
var
   gilija,eglija:masyvas;
    n_gilija, n_eglija : integer;
{-----------------------------duomenų nuskaitymo procedūūra--------------------}
procedure nuskaitymas;
var i, y, g, j : integer;
   failas : text;
begin
   assign(failas, 'U1.txt');
   reset(failas);
   readln(failas, n_gilija);
   for i:=1 to n_gilija do
       read(failas, gilija[i].nominalai);
   readln(failas);
   for y:=1 to n_gilija do
       read(failas, gilija[y].monetos);
   readln(failas);
   readln(failas, n_eglija);
   for g:=1 to n_eglija do
       read(failas, eglija[g].nominalai);
   readln(failas);
   for j:=1 to n_eglija do
       read(failas, eglija[j].monetos);
   close(failas);
end;
{------funkcija, kuri skaičiuoja, kokią sumą pinigų keičia studentas----------}
function pinigu_suma(suma:masyvas) :integer;
var sum, k :integer;
begin
   sum := 0;
   for k := 1 to 50 do
    sum:=sum+(suma[k].nominalai*suma[k].monetos);
   pinigu_suma:=sum;
end;
{-------------------procedūra spausdinanti rezultatus į failą------------------}
procedure rezultatai;
var x, atsakymai, monetu_suma, suma_gilija, suma_eglija : integer;
   irasymas : text;
begin
   assign(irasymas, 'U1rez.txt');
   rewrite(irasymas);
   atsakymai := 0;
   monetu_suma :=  0;
   suma_gilija:=pinigu_suma(gilija);
   suma_eglija:=pinigu_suma(eglija);
   for x := 1 to n_eglija do
    begin
       atsakymai := suma_gilija div eglija[x].nominalai;
       suma_gilija := suma_gilija - eglija[x].nominalai * atsakymai;
       monetu_suma := monetu_suma + atsakymai;
       writeln(irasymas, eglija[x].nominalai,' ',atsakymai);
    end;
   writeln(irasymas, monetu_suma);
   atsakymai := 0;
   monetu_suma := 0;
   for x := 1 to n_gilija do
    begin
       atsakymai := suma_eglija div gilija[x].nominalai;
       suma_eglija := suma_eglija - gilija[x].nominalai * atsakymai;
       monetu_suma := monetu_suma + atsakymai;
       writeln(irasymas, gilija[x].nominalai, ' ', atsakymai);
    end;
   writeln(irasymas, monetu_suma);
   close(irasymas);
end;
{---------------pagrindinė programa--------------------------------------------}
begin
   nuskaitymas;
   rezultatai;
end.

Čia tik mane taip mokė, nežinau gal ir nėra viskas kaip turi būt :rolleyes:

Redagavo agnek21
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Mano pastebėjimai:

1. Programos pavadinimą moko rašyti tik ‚Mainai‘.

2. Nuskaitymo procedūra visada turi būti prieš funkcijas(programos pradžioje).

3. Funkciją galima iškviesti į procedūrą.(Nors manau tai ne taip svarbu).

4. Pagrindinės programos pabaigoje parašyta 'readln', sakė kad tai skaitosi kaip darbas su ekranu.

5. Po ciklo, jei vykdomas tik viena eilutė, nereikia 'begin' ir 'end'.(Tik apkrauni darbu programą)

O dėl komentavimo tai mums visada sako rašyti ką daro funkcijos ir procedūros

, o dėl kintamųjų komentavimo tai, manau, kad tavo programoje tai nėra būtina, nes kintamieji yra ne raidėmis o žodžiais. Jei pvz. vietoj 'monetu_suma' būtų ms reiktų komentuot, kad ms-monetų suma.

čia pakoreguota kaip atrodo:

 

Programa

Čia tik mane taip mokė, nežinau gal ir nėra viskas kaip turi būt :rolleyes:

 

Ačiū už patarimus :) Tik dabar pastebėjau kai kurias mini klaidas, kurių niekad nedarydavau :) Žioplumas...

Dėl komentavimo - velnias, gi ir man taip atrodo. Nelogiška komentuoti, pavyzdžiui "Atidaromas failas U1.txt duomenų nuskaitymui".

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Štai, parašiau programą su vienamčiais masyvais :)

Komentavau, tik įdomu, ar tiek komentarų pakanka? :)

Ir dar klausimas, uždavinyje rašoma "Kiekvienas iš jų išvykdamas gali pasiimti nedaugiau kaip 3000 vertės savo v.bės pinigų". Tai, ar reikia dėti kokias tai apsaugas programoje, jei ši suma viršijama? :)

 

program Mainai;
type
   nominalai = array [1..50] of integer;
   monetos = array [1..50] of integer;
var
   g_nominalai,e_nominalai:nominalai;
   g_monetos,e_monetos:monetos;
   n_gilija,n_eglija,g_suma,e_suma,rezultatas,monetu_skaicius:integer;
{----Procedūra skirta duomenų nuskaitymui iš failo U1.txt. Duomenys įrašomi į vienmačius masyvus.------}
procedure nuskaitymas;
var i:integer;
   duomenys:text;
begin
   assign(duomenys, 'U1.txt');
   reset(duomenys);
   readln(duomenys, n_gilija);
   for i:=1 to n_gilija do
    begin
    read(duomenys, g_nominalai[i]);
    end;
   readln(duomenys);
   for i:=1 to n_gilija do
    begin
    read(duomenys, g_monetos[i]);
    end;
   readln(duomenys);
   readln(duomenys, n_eglija);
   for i:=1 to n_eglija do
    begin
    read(duomenys, e_nominalai[i]);
    end;
   readln(duomenys);
   for i:=1 to n_eglija do
    begin
    read(duomenys, e_monetos[i]);
    end;
   readln(duomenys);
   close(duomenys);
end;
{--Procedūra skirta apskaičiuoti kokios valstybės studentas, kiek monetų gaus. Procedūra taip pat įrašo duomenis į U1rez.txt failą.--}
procedure irasymas;
var i:integer;
   irasymas:text;
begin
   assign(irasymas, 'U1rez.txt');
   rewrite(irasymas);

   rezultatas:=0;
   monetu_skaicius:=0;
   for i:=1 to n_eglija do
    begin
    rezultatas:=g_suma div e_nominalai[i];
    g_suma:=g_suma-rezultatas*e_nominalai[i];
    write(irasymas,e_nominalai[i],' ',rezultatas);
    writeln(irasymas);
    monetu_skaicius:=monetu_skaicius+rezultatas;
    end;
   writeln(irasymas,monetu_skaicius);

   rezultatas:=0;
   monetu_skaicius:=0;
   for i:=1 to n_gilija do
    begin
    rezultatas:=e_suma div g_nominalai[i];
    e_suma:=e_suma-rezultatas*g_nominalai[i];
    write(irasymas,g_nominalai[i],' ',rezultatas);
    writeln(irasymas);
    monetu_skaicius:=monetu_skaicius+rezultatas;
    end;
   writeln(irasymas,monetu_skaicius);
   close(irasymas);
end;
{------------Funkcija skirta turimai studento sumai apskaičiuoti.-------------}
function suma(nominalai:nominalai; monetos:monetos):integer;
var i:integer;
begin
   suma:=0;
   for i:=1 to 50 do
    suma:=suma+nominalai[i]*monetos[i];
end;
{-----------Likusi programos dalis skirta kreipimuisi į procedūras bei funkciją.------------}
begin
   nuskaitymas;
   g_suma:=suma(g_nominalai, g_monetos);
   e_suma:=suma(e_nominalai, e_monetos);
   irasymas;
end.

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ą...