Pereiti prie turinio

Informaciniu technologijų VBE 2011 užduotis "Šokiai"


Rekomenduojami pranešimai

Sveiki. Iškilo problemėlė. Sumąsščiau parašyti programą "Šokiai" besiruošiant poryt vyksiančiam egzaminui, tačiau vis nepavyksta jos parašyti. Sąlyga čia: http://www.nec.lt/failai/2062_IT-VBE-1_2011.pdf (18 puslapis programa "Šokiai"). Jau sužinojau, kad čia yra įsivėlusi klaida duomenų faile, kur pirmasis skaičius turėtų būti ne 5, o 3(nes tik 3 poros), tačiau pataisius šią NEC padarytą klaidą vis tiek meta klaidą "Blogas skaičiaus formatas". taigi, gal galite bent padėti parašyti programos nuskaitymą? Būčiau labai, labai dėkingas. Mano programa:

 

program Bevardë3;

type sokiai = record
      vardas : string[20];
      balaiTech,
      balaiArt,
      bendriBalai : integer;
    end;

type mas = array [1..100] of sokiai;

  var M : mas;
      n : integer;

procedure nuskaitymas;
  var i, j, a, b, k : integer;
      f1 : text;
begin
  assign(f1, 'duom.txt');
  reset(f1);
  readln(f1, n, k);
  for i := 1 to n do
    begin
      readln(f1, M[i].vardas);
      for j := 1 to k do
         readln(f1, M[i].balaitech); // TIES ŠIA EILUTE PROGRAMA SUSTOJA
      readln(f1);
      for j := 1 to k do
         readln(f1, M[i].balaiArt);
      readln(f1);
    end;
end;

begin
 nuskaitymas;

 Readln;
end.

Redagavo MrDBVids
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Blogai panaudojai readln - nuskaito visą eilutė, reik naudoti read - nuskaito iš eilės eilutę.

procedure nuskaitymas;
  var i, j, a, b, k : integer;
  	f1 : text;
begin
  assign(f1, 'duom.txt');
  reset(f1);
  readln(f1, n, k);
  for i := 1 to n do
	begin
  	readln(f1, M[i].vardas);
  	writeln(M[i].vardas);
  	for j := 1 to k do
  	begin
       	read(f1, M[i].balaitech); // TIES ŠIA EILUTE PROGRAMA SUSTOJA
       	write(M[i].balaitech);
  	end;
  	readln(F1);
  	writeln;
  	for j := 1 to k do
  	begin
       	read(f1, M[i].balaiArt);
       	write(M[i].balaiArt);
  	end;
  	writeln;
  	readln(F1);
	end;
end;

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai vat. Dariau dabar dar vieną programą, bet visiškai nesąmones man išveda. Programava vadinasi "Pirštinės"(http://nec.lt/failai/2062_IT-VBE-1_2011.pdf , 18 puslapis). Mano kodas:

program pirstines2;

type mas = array [1..100] of integer;

  var VK, VD, MK, MD : mas;
      n : integer;

procedure nuskaitymas;
  var f1 : text;
      i, j, d, l, r : integer;
begin
  assign(f1, 'duom.txt');
  reset(f1);
  readln(f1, n);
  for i := 1 to n do
    begin
      readln(f1, l, r, d);
      if l = 4
        then if r = 1
          then MK[d] := MK[d] + 1
          else MD[d] := MD[d] + 1;
      if l = 3
        then if r = 1
          then VK[d] := VK[d] + 1
          else VD[d] := VD[d] + 1;
    end;
  close(f1);
end;

function kiekPoru(Kr, Dr : mas) : integer;
  var sum, i : integer;
begin
  sum := 0;
  for i := 1 to 100 do
    begin
      if (Kr[i] > 0) and (Dr[i] > 0)
         then if Kr[i] < Dr[i]
            then sum := sum + Kr[i]
            else sum := sum + Dr[i];
    end;
  kiekPoru := sum;
end;

function likusios (Kr, Dr : mas) : integer;
  var i, viso : integer;
begin
  viso := 0;
  for i := 1 to 100 do
    viso := viso + Kr[i] + Dr[i];
  likusios := viso;
end;

procedure isvedimas;
  var f2 : text;
      i  : integer;
      Kr, Dr : mas;
begin
  assign(f2, 'rez.txt');
  rewrite(f2);
  writeln(f2, MK[i], MD[i]);
  writeln(f2, VK[i], VD[i]);
  writeln(f2, Kr[i], Dr[i]);
  close(f2);
end;

  var m, v, mo, vr : integer;
begin
 nuskaitymas;
 isvedimas;
end.

 

Gal žinote, kas jai blogai? Aš asmeniškai galvoju, kad mano išvedimas klaidingas, bet nežinau, kaip pataisyti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tavo išvedimas blogas ir apskaičiavimą lengvesnį galimą pasidaryt..

program pirstines2;

type mas = array [1..100] of integer;

  var VK, VD, MK, MD : mas;
  	n,m,v: integer;

procedure nuskaitymas;
  var f1 : text;
  	i, j, d, l, r : integer;
begin
m:=0; v:=0;
  assign(f1, 'duom.txt');
  reset(f1);
  readln(f1, n);
  for i := 1 to n do
	begin
  	readln(f1, l, r, d);
  	if l = 4
    	then
       	begin
           	m:=m+1;
           	if r = 1
           	then MK[d] := MK[d] + 1
           	else MD[d] := MD[d] + 1;
       	end;
  	if l = 3
    	then
       	begin
           	v:=v+1;
           	if r = 1
           	then VK[d] := VK[d] + 1
           	else VD[d] := VD[d] + 1;
       	end;
	end;
  close(f1);
end;

function kiekPoru(Kr, Dr : mas) : integer;
  var sum, i : integer;
begin
  sum := 0;
  for i := 1 to 100 do
	begin
  	if (Kr[i] > 0) and (Dr[i] > 0)
     	then if Kr[i] < Dr[i]
        	then sum := sum + Kr[i]
        	else sum := sum + Dr[i];
	end;
  kiekPoru := sum;
end;

function likusios(m:integer; Kr, Dr : mas) : integer;
begin
likusios:=m-(2*kiekPoru(MK,MD)); //Apskaičiavimas žinome kiek buvo pirštinių ir žinome kiek turime porų porą sudaro dvi pirštinės.
end;

procedure isvedimas;
  var f2 : text;
  	i  : integer;
  	Kr, Dr : mas;
begin
  assign(f2, 'rez.txt');
  rewrite(f2);
  writeln(kiekPoru(MK,MD));
  writeln(kiekPoru(VK,VD));
  writeln(likusios(m,MK,MD));
  writeln(likusios(v,VK,VD));
  close(f2);
end;

begin
 nuskaitymas;
 isvedimas;
 readln;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Cia tikrai visas kodas? Paskalio praktiskai nesimokinau isvis, galbut nezinau, bet kur pagrindinei f-joj kreipiniai i kitas funkcijas? nes matau tik i skaityma ir isvedima. Isvedimas irgi kazkoks, isvedi masyvo i-taja reiksme, nors i lygu niekam, tiktais aprasytas tik kintamasis. Cia gal paskali taip vyksta nezinau, jeigu kvailos mintys prasau pataisykit ;D mokykloj su c++ programuojam.

EDIT: Kol rasiau zinute pataise tavo programa, tai dabar lyg ir viskas aisku, kreipiniai is isvedimo f-jos eina :) is tavo pirmo kodo tai ten neaisku niekas kaip vyksta ;D

Redagavo hafnis1324
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Cia tikrai visas kodas? Paskalio praktiskai nesimokinau isvis, galbut nezinau, bet kur pagrindinei f-joj kreipiniai i kitas funkcijas? nes matau tik i skaityma ir isvedima. Isvedimas irgi kazkoks, isvedi masyvo i-taja reiksme, nors i lygu niekam, tiktais aprasytas tik kintamasis. Cia gal paskali taip vyksta nezinau, jeigu kvailos mintys prasau pataisykit ;D mokykloj su c++ programuojam.

 

Visas kodas čia, matai čia nevisiškai teisingai rašoma, turėtu būti naudojame neglobalų kintamieji visur procedūroje ir funkcijoje ir programoje o lokalūs.

 

O taip viskas gerai, į procedūras, funkcijas, gali kreiptis bet kurioje kitoje funkcijoje, procedūroje esančiose žemiau. Pati programa yra pačiam gale

 

begin
 nuskaitymas;
 isvedimas;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Visas kodas čia, matai čia nevisiškai teisingai rašoma, turėtu būti naudojame neglobalų kintamieji visur procedūroje ir funkcijoje ir programoje o lokalūs.

 

O taip viskas gerai, į procedūras, funkcijas, gali kreiptis bet kurioje kitoje funkcijoje, procedūroje esančiose žemiau. Pati programa yra pačiam gale

 

begin
 nuskaitymas;
 isvedimas;
end.

Matai dar gi ir globalus cia kintamieji :) nepastebejau net. Kai c++ programuojam, tai visos funkcijos eina zemiau pagrindines, tiktais deklaruojam pries tai, tai todel ir kreipiniu is maino reik i jas (aisku jei viena i kita nesikreipia, nes tokiu atveju nebutinai). Nesu bandes visa procedura uzrasyt auksciau pagrindines, nezinau kaip tada veikia :D Paskali kaip suprantu tai prasisuka viskas is eiles.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Matai dar gi ir globalus cia kintamieji :) nepastebejau net. Kai c++ programuojam, tai visos funkcijos eina zemiau pagrindines, tiktais deklaruojam pries tai, tai todel ir kreipiniu is maino reik i jas (aisku jei viena i kita nesikreipia, nes tokiu atveju nebutinai). Nesu bandes visa procedura uzrasyt auksciau pagrindines, nezinau kaip tada veikia :D Paskali kaip suprantu tai prasisuka viskas is eiles.

 

Tokia struktūra yra

 

program pavadinimas
//Aprašomi masyvai, įrašai t.t.
type mas=array[1..xxx] of integer

//Toliau eina procedūros, funkcijos, jei į jas kreipsis kitą tai į kurią kreipsis rašoma aukščiau iš kurios kreipiamasis.
function Funkcija(a,b:integer):integer;
begin
//kažkas
end;

procedure Procedura(a,b:integer);
begin
//kreipiamės į funkciją jei reik
Funkcija(a,b);
end;

//Toliau eina pati programa
var a,b:integer; //aprašomi kintamieji.

begin
//Kreipiamės į procedūrą.
Procedura(a,b);
end;

 

Nuo c++ nemažai skiriasi pascal.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tokia struktūra yra

 

program pavadinimas
//Aprašomi masyvai, įrašai t.t.
type mas=array[1..xxx] of integer

//Toliau eina procedūros, funkcijos, jei į jas kreipsis kitą tai į kurią kreipsis rašoma aukščiau iš kurios kreipiamasis.
function Funkcija(a,b:integer):integer;
begin
//kažkas
end;

procedure Procedura(a,b:integer);
begin
//kreipiamės į funkciją jei reik
Funkcija(a,b);
end;

//Toliau eina pati programa
var a,b:integer; //aprašomi kintamieji.

begin
//Kreipiamės į procedūrą.
Procedura(a,b);
end;

 

Nuo c++ nemažai skiriasi pascal.

o tai jeigu pvz apsirasyciau globaluju kintamaji X = 5, tada funkcija, kuri prie X prides vieneta, ir tada pagrindinei funkcijoj (programoj) paprasyciau atspausdint X, be kreipinio i ta funkcija, tai spausdintu 5 ar 6?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

o tai jeigu pvz apsirasyciau globaluju kintamaji X = 5, tada funkcija, kuri prie X prides vieneta, ir tada pagrindinei funkcijoj (programoj) paprasyciau atspausdint X, be kreipinio i ta funkcija, tai spausdintu 5 ar 6?

 

Pascal funkcija tik vieną reikšme gražina, šiuo atveju su funkcija taip neina su ja bus taip

var x;

x:=5;

function Sudetis(a:integer;):integer;
begin
Sudetis:=a+1;
end;

//tada kreipiamės į funkciją.
writeln(Sudetis(x)); //Ji atspausdins x+1; t.y 6 pačio x reikšme nepakeičia.
//Norint pakeisti darom taip
x:=Sudetis(x);

O su procedure kitaip


var x;

x:=5;

proceudre Sudetis(var a:integer;);
begin
a:=a+1;
end;

//Kreipiamės į procedūrą
Sudėtis(x); //ir tada pakeičia reikšmę x bus 6, o jei proceduroje nebus žodelio var tada reikšmė nesikeičia.

 

Galima kreiptis ir kitaip

procedure Sudetis;
begin
x:=x+1;
end;

//tada
Sudetis; //ir pakeičia reikšme.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pascal funkcija tik vieną reikšme gražina, šiuo atveju su funkcija taip neina su ja bus taip

var x;

x:=5;

function Sudetis(a:integer;):integer;
begin
Sudetis:=a+1;
end;

//tada kreipiamės į funkciją.
writeln(Sudetis(x)); //Ji atspausdins x+1; t.y 6 pačio x reikšme nepakeičia.
//Norint pakeisti darom taip
x:=Sudetis(x);

O su procedure kitaip


var x;

x:=5;

proceudre Sudetis(var a:integer;);
begin
a:=a+1;
end;

//Kreipiamės į procedūrą
Sudėtis(x); //ir tada pakeičia reikšmę x bus 6, o jei proceduroje nebus žodelio var tada reikšmė nesikeičia.

 

Galima kreiptis ir kitaip

procedure Sudetis;
begin
x:=x+1;
end;

//tada
Sudetis; //ir pakeičia reikšme.

O jeigu mano programa tokia

var i : integer

Procedure Keitimas ();
begin
i:= i*5;
end;

begin
Writeln(i);
end.

 

tai ta mano procedura dabar pakeis mano i (globalia) reiksme, ar visgi reik programoj dar dadet Keitimas;?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O jeigu mano programa tokia

var i : integer

Procedure Keitimas ();
begin
i:= i*5;
end;

begin
Writeln(i);
end.

 

tai ta mano procedura dabar pakeis mano i (globalia) reiksme, ar visgi reik programoj dar dadet Keitimas;?

 

Nepakeis, nes nesikreipi į procedura..

program Bevardė5;
var i : integer;

procedure Keitimas();
begin
i:= i*5;
end;

begin
i:=5;
Writeln(i);
end.

 

Pakeis.

program Bevardė5;
var i : integer;

procedure Keitimas();
begin
i:= i*5;
end;

begin
i:=5;
Keitimas();
Writeln(i);
end.

Redagavo wigas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai kaip ir priklauso tada :D Kazkaip po tos netaisiklingos programos ir pacios programos strukturos paskali buvau susiglumines, galvojau gal proceduros/funkcijos su globaliais kintamaisiais suveikia bet kokiu atveju, i jas kreiptasi ar ne :)

 

Būtina kreiptis, tik ten buvo šiek tiek kitaip, kreipiamasis buvo iš kitų procedūrų todėl taip ir atrodė.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Būtina kreiptis, tik ten buvo šiek tiek kitaip, kreipiamasis buvo iš kitų procedūrų todėl taip ir atrodė.

Autoriaus programoj nebuvo nei vieno kreipimosi i proceduras apart is programos i skaityma/isvedima, o nei vienas, nei kitas i daugiau ka nesikreipe :)

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