Pereiti prie turinio

Informatikos VBE ir išmok c++


Rekomenduojami pranešimai

Pagal uzduoti tai kaip ir viska ispildei tai butu max, egzamino vertinimo kriterijai tikrai nera tie i kuriuos turi orientuotis. Ten neatsizvelgiama i pacius svarbiausiu procesus programuojant, t.y. nepalikt uztersto ramo, kad neliktu memory leaku, neperkraut bereikalingais darbais.

Kaip vienas destytojas univere visad sakydavo - "kad veikia tai nereiskia kad uzduotis atlikta gerai.".

 

 

Salygoje:

1. pirmoje eilutėje yra du sveikieji skaičiai: dievųskaičius n (2 ≤n ≤50)ir kauliukųskaičius k (1 ≤k ≤10);

 

Taip maciau kad tai yra. Bet kada tu parasai toki sakini

int a[50];

tau rame iskart yra isskiriama vietos 50 tavo sukurtos strukturos elementu. Tavo struktura buvo sudaryta is stringo ir 14 integeriu. Neskaiciuojant stringu (ju dydis nustatomas kintantis pagal ilgi) vien is integeriu gaunasi

4 byte * 14 lauku * 50 eiluciu = 2800 baitu = 1.7 kilobaito.

Tu visad tiek isskiri vietos nors jei ir naudoji tik 3 ar 5 irasus.

Labai neefektyvu.

 

va cia ir pasitarnauja new. New sukuria masyva ar klase dinamiskai. As aspirasau rodykle i struktura

Dievai *A;

tada vykdydamas koda, nuskaites pirma failo eilute, zinau kiek bus dievu tai galima ir sukurti masyva. New iskviecia masyvo konstruktoriu, kitaip sakant sukuria pati masyva. Ir taip sukuriama ne butinai 50 elementu, bet tiek kiek tau reikia. Privalumai tokie kad neisnaudoji daugiau vietos negu reikia ir tavo elementu kiekis lieka neribojamas. Gali buti ne 50 o nors ir 500.

 

 

2. Taskai naudojami rikiuojant bet paskui nenaudojami

Atlikineti rikiavima yra neefektyvu ir netikslinga situo atveju. Kai eini i maxima nusipirkti alaus taigi neissidelioji viso alaus is eiles pagal tai kaip jie tau patinka ir tad pasiimi pirma, tiesiog nueini prie to alaus kurio nori ir pasiimi. Dar patikrini ar kokiam kitam kuri megsti nera akciju. Cia analogiska. Tiesiog begi per masyva ir tikrini kuris laimetojas. Gali saugot laimetojo duomenis atskirame kintamajame, gali saugoti jo indeksa kaip kad mano kode padaryta. Bet rusiuot kad galetum paiimti pirmaji tikrai neefektyvu.

 

 

Del masyvo nunulinimo:

Kai tu viska deklaruoji statiskai tai visu elementu sunaikinimu rupinasi pati programa. Kitaip sakant tu uzdarai prograama ir ji sunaikina visus elementus. Bet kai sukuri kazka dinamiskai panaudodamas new, tai ta pats ir turi sunaikinti. Kitaip tie duomenis liks rame iki kol perkrausi kompa.

Masyvui sunaikinti panaudok

delete[] A;

 

Ir cia mano pavizdy kur pateikiau yra klaida su situo:

Eilute

dievai = NULL;

reikia pakeisti i

delete[] dievai;

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Matyt pamiršai, kad čia kalba eina apie mokyklą, o ne apie universitetą. Niekas per egzaminus neprogramuoja taip (nežaidžia su dinamine atmintimi), o jei taip ir daro, tai tik švaisto laiką. Ir iš vis, mokykloje to nemoko. O ir ne sovietmetis dabar, nėra ta atmintis toks svarbus resursas, kad reikėtų skaičiuoti kiekvieną baitą. Ir darant kažką "realaus" ne visada protinga naudoti dinaminę atmintį, jei žinoma, kad nebus saugomas labai didelis duomenų kiekis. Mano nuomonė, geriau yra "pašvaistyti" truputį atminties, jei dėl to programa veiks greičiau (atminties priskyrimas užima laiko, o jei tai daroma dažnai... Ir programuot šiek tiek mažiau reikia).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Matyt pamiršai, kad čia kalba eina apie mokyklą, o ne apie universitetą. Niekas per egzaminus neprogramuoja taip (nežaidžia su dinamine atmintimi), o jei taip ir daro, tai tik švaisto laiką. Ir iš vis, mokykloje to nemoko. O ir ne sovietmetis dabar, nėra ta atmintis toks svarbus resursas, kad reikėtų skaičiuoti kiekvieną baitą. Ir darant kažką "realaus" ne visada protinga naudoti dinaminę atmintį, jei žinoma, kad nebus saugomas labai didelis duomenų kiekis. Mano nuomonė, geriau yra "pašvaistyti" truputį atminties, jei dėl to programa veiks greičiau (atminties priskyrimas užima laiko, o jei tai daroma dažnai... Ir programuot šiek tiek mažiau reikia).

Tai kam dabar dirbti su statine jei vistiek veliau reikes pereit prie dinaminiu. Koks cia laiko svaistymas jei papildomai parasai 1 eilute. Beto jei taip sneki apie atminties valdyma tai tu nedirbi su rimtomis taikomosiomis programomis.

O kuo anksciau suprasi kad atminti valdyt reikia, nuo to tik geriau. Jei pats esi protingas tai ir naudoti dinamine atminti visada protinga. O beje jei siuo atveju tas pasvaistymas naudos neduoda.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Matyt pamiršai, kad čia kalba eina apie mokyklą, o ne apie universitetą. Niekas per egzaminus neprogramuoja taip (nežaidžia su dinamine atmintimi), o jei taip ir daro, tai tik švaisto laiką.

<...>

Tai kam dabar dirbti su statine jei vistiek veliau reikes pereit prie dinaminiu. Koks cia laiko svaistymas jei papildomai parasai 1 eilute.

<...>

Tai kam rūpintis dėl kelių kilobaitų egzaimino metu?

 

Pripažinkim – programavimo mokymas mokyklose yra nesąmonė, beveik neturinti nieko bendro su programavimu realiame pasaulyje. Mokykliniame kurse, kiek pamenu, niekur nemokama dinaminio atminties tvarkymo. Tuo labiau koks nors ne pats protingiausias vertintojas nesupras ką parašei ir gausi minus taškų... :)

 

Žinoma, kad tikroje programoje reiktų naudoti atmintį efektyviai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai kam rūpintis dėl kelių kilobaitų egzaimino metu?

 

Pripažinkim – programavimo mokymas mokyklose yra nesąmonė, beveik neturinti nieko bendro su programavimu realiame pasaulyje. Mokykliniame kurse, kiek pamenu, niekur nemokama dinaminio atminties tvarkymo. Tuo labiau koks nors ne pats protingiausias vertintojas nesupras ką parašei ir gausi minus taškų... :)

 

Žinoma, kad tikroje programoje reiktų naudoti atmintį efektyviai.

Aš nežinau kaip kitose mokyklose moko c++, nes pas mane moko tik pascal mokytoja sake, kad vadoveliu neturi tam, bet man tai visai nesvarbu, puikiai su tuo galiu pats sugebėti išmokti :) Programavimo yra visada kur tobulėti.

 

Kur man kiti patarė taip, daryti nerekomenduoji? Gali vertintojas papulti biški kvailas ir nieko nesuprasti ir man taškus numinusuos? Na bet, dar yra toks dalykas, kad galima duoti apeliacija kuri galbūt pagelbėtu :) na bet kam jos reikia laika tik sugaišins. Kaip minėjo jau, reiks patobulėti kaip sakė pagal išskirimus ir t.t. :) bet per egza neoptimaliai parašyti ir tiek galbūt bus naudingiau.. tiesa sakant paskutiniai sakiniai jau priklauso nuo tavo atsakimo biški užbegau įvikiams už akiu :)

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai kam rūpintis dėl kelių kilobaitų egzaimino metu?

 

Pripažinkim – programavimo mokymas mokyklose yra nesąmonė, beveik neturinti nieko bendro su programavimu realiame pasaulyje. Mokykliniame kurse, kiek pamenu, niekur nemokama dinaminio atminties tvarkymo. Tuo labiau koks nors ne pats protingiausias vertintojas nesupras ką parašei ir gausi minus taškų... :)

 

Žinoma, kad tikroje programoje reiktų naudoti atmintį efektyviai.

 

Visiskai sutinku su tuo ka pasakei. Bet zmogus klause ka galima padaryt geriau. Tai ir pasakiau kaip geriau ir argumentavau kodel geriau. Beto programuot mokomasi ne tam kad islaikyt egzamina o tam kad but programuotoju. O tam tikrai pravers dinaminiai elementai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Visiskai sutinku su tuo ka pasakei. Bet zmogus klause ka galima padaryt geriau. Tai ir pasakiau kaip geriau ir argumentavau kodel geriau. Beto programuot mokomasi ne tam kad islaikyt egzamina o tam kad but programuotoju. O tam tikrai pravers dinaminiai elementai.

Žinoma, kad viskas priklauso nuo mokymosi tikslo. Jei tik išlaikyt egzaminą – tada mokytis pagal tą nevykusią medžiagą ir kuo labiau bandyti įtikti vertintojams.

 

Jei norima iš tikrųjų išmokti C++ – tada gerą knygą ir mokytis tinkamai. Bet tai išsiplečia daug toliau, nei išmoko mokykla. Nors egzamine vis tiek reikėtų elgtis pagal pirmąjį variantą – saugiau įvertinimo atžvilgiu :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Žinoma, kad viskas priklauso nuo mokymosi tikslo. Jei tik išlaikyt egzaminą – tada mokytis pagal tą nevykusią medžiagą ir kuo labiau bandyti įtikti vertintojams.

 

Jei norima iš tikrųjų išmokti C++ – tada gerą knygą ir mokytis tinkamai. Bet tai išsiplečia daug toliau, nei išmoko mokykla. Nors egzamine vis tiek reikėtų elgtis pagal pirmąjį variantą – saugiau įvertinimo atžvilgiu :)

Tai galu gale, tai man per egzamina elgtis taip:

Ne taupyti resursu kiek reikia neoptimaliai tiek ir naudosiu, svarbiausia gauti betkokiu budu teisingus atsakimus?

 

Bet ten yra tokia vertinimo lentele kiek tasku uz ka ir pan.,

cituoju:

Teisingai skaitomi duomenys iš failo.

 

Paiškinkite man o kaip galima failus neteisingai nuskaityti? Kaip žinoti koks teisingas būdas yra juk sprendimo variantu yra labai daug., iš kur man žinot, kad tas teisingas o kitas ne? O gal jie turi omenije jei duomenis sukelia i masyvus ar strukturas tai cia teisingai...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Paiškinkite man o kaip galima failus neteisingai nuskaityti? Kaip žinoti koks teisingas būdas yra juk sprendimo variantu yra labai daug., iš kur man žinot, kad tas teisingas o kitas ne? O gal jie turi omenije jei duomenis sukelia i masyvus ar strukturas tai cia teisingai...

 

Jeigu nuskaito visus duomenis, tokius kurie yra faile, kiek suprantu tai ir reiškia teisingą nuskaitymą

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gal turite kas nors kokios medžiagos apie c++ masyvus ju rikiavima ir t.t. :)

Man su masyvais sunkiai sekasi. O paiškinti kas konkrečiai negaliu.

 

U1.txt:

8

9 5 7 -5 13 -4 11

7 5 -3 12 -5 17 -3

25 7 12 -3 5 -5 7 -5 3

14 5 12 -3 10 -7 8

5 1 -40

33 5 15 -5 9 -3 8

11 5 -12 8 -5 12 -3

13 5 3 -4 25 -5 3

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int duom_mas[504],start_p[8],duom_id,n;
int krepsininko_numeris[12],krepsininkas_zaide[12],krep_zaidel[12],m=0;
int krep_zaista[12];

void Skaityti() { // Skaitome duomenis is failo.
int numeris=0,laikas=0;
   ifstream failas("U1.txt");
       failas >> n;
       for(int m=0;m<n;m++) {
           failas >> numeris >> laikas;
           duom_mas[duom_id] = numeris;
           duom_id++;
           duom_mas[duom_id] = laikas;
           duom_id++;
               for(int o=0;o<laikas;o++) {
                   failas >> duom_mas[duom_id];
                   duom_id++;
               }
       }
   failas.close();
}
void StartinisPenketukas() { // randame penketuka.
   int numeris,laikai,pirmas_nr,id=0;
   for(int i=0;i<duom_id;i++) {
       numeris = duom_mas[i];
       laikai = duom_mas[i+1];
           if(duom_mas[i+2] > 0) {
                   start_p[id] = numeris;
                   id++;
           }
           i = i + laikai+1;
   }
}
void start_rikiavimas() {
   int laik,laik2;
       for(int i=0;i<4;i++) {
           laik = i;
           for (int j=i+1; j<5; j++) {
               if(start_p[laik] > start_p[j]){
                   laik = j;
               }
               laik2 = start_p[laik];
               start_p[laik] = start_p[i];
               start_p[i] = laik2;
           }
       }
}
void daugiausiai_zaide() {
int id = 0,laikas,krep_nr[12],krep_z[12];
   for(int i=0;i<duom_id;i++) {
       krep_nr[id] = duom_mas[i];
       krep_z[id] = duom_mas[i+1];
   }
   id = 0;
       for(int i=1;i<duom_id;i++) {
          for(int j=0;j<krep_z[id];j++) {
               krep_zaista[id] += duom_mas[j];
          }
          id++;
       i = i + 2;
       }
}
void Irasyti() {
   ofstream rez("rez.txt");
            rez << start_p[0] << " " << start_p[1] << " " << start_p[2] << " " << start_p[3] << " " << start_p[4] <<endl;

            for(int i=0;i<12;i++) {

               rez << krep_zaista[i] << " ";

            }
   rez.close();
}
int main() {
   Skaityti();
   StartinisPenketukas();
   start_rikiavimas();
   daugiausiai_zaide();

   Irasyti();
   return 0;
}

 

Salyga:

Krepšinio rungtynių metu sekretoriatas registruoja abiejų komandų kiekvieno

krepšininko buvimo aikštelėje ir sėdėjimo ant atsarginių suolelio laikus minutėmis.

Vienu metu aikštelėje žaidžia po 5 krepšininkus.

Parašykite programą, kuri nustatytų vienos komandos:

• startinį krepšininkų penketuką numerių didėjimo tvarka;

• krepšininko, kuris daugiausia laiko buvo aikštelėje, numerį ir laiką, o jeigu tokie buvo

keli, tai nurodytų vieną, kurio numeris mažiausias;

• krepšininko, kuris daugiausia laiko sėdėjo ant atsarginių suolelio, numerį ir laiką, o jeigu

tokie buvo keli, tai nurodytų vieną, kurio numeris mažiausias;

 

Duomenys

Vienos komandos duomenys yra tekstiniame faile U1.txt:

• Pirmoje eilutėje yra užrašytas krepšininkų skaičius n (6 ≤ n ≤ 12).

• Toliau atskirose eilutėse yra surašyti duomenys apie kiekvieną krepšininką (sveikieji

skaičiai):

o pirmas skaičius eilutėje – krepšininko numeris k (4 ≤ k ≤ 99);

o antras skaičius eilutėje – laikų (žaista ir/arba ilsėtasi) skaičius t (1 ≤ t ≤ 40);

o toliau eilutėje surašyti laikai: teigiamas skaičius – kiek minučių būta aikštelėje,

neigiamas skaičius – kiek minučių sėdėta ant atsarginių suolelio. Pavyzdžiui:

18 –11 9 –2 reiškia, kad krepšininkas pirmas 18 min. žaidė, po to 11 min. sėdėjo

ant atsarginių suolelio, vėl 9 min. žaidė ir likusias iki rungtynių pabaigos 2 min. sėdėjo.

Pastaba. Rungtynių trukmė 40 min.

 

Rezultatai

Tekstiniame faile U1Rez.txt rezultatus pateikite tokia tvarka:

• pirmoje eilutėje – startinio penketuko krepšininkų numerius didėjančia seka;

• antroje eilutėje – krepšininko, kuris daugiausiai laiko buvo aikštelėje, numerį ir laiką.

Jeigu tokie buvo keli, tai nurodykite vieną, kurio numeris mažiausias;

• trečioje eilutėje – krepšininko, kuris daugiausia laiko sėdėjo ant atsarginių suolelio,

numerį ir laiką. Jeigu tokie buvo keli, tai nurodykite vieną, kurio numeris mažiausias.

Skaičius eilutėje skirkite vienu tarpo simboliu.

Nurodymai

• Programoje naudokite vienmačius masyvus.

• Parašykite procedūrą

• Parašykite funkciją, kuri surastų masyve didžiausio elemento indeksą arba reikšmę.

duomenims į masyvus skaityti.

• Programoje nevartokite sakinių, skirtų darbui su ekranu.

 

Rezultatas:

9 13 14 25 33

33 32

5 40

Programinis kodas labai neoptimalus čia, kaikurie masyvai net nereikalingi. Problema yra man su funkcija "daugiausiai_zaide();"

isrinkti ilgiausiai zaidusiu krepsininku. Internete nieko kažko panašaus atsakymo neradau nors gal ir nebuciau rades.

Norėčiau, tik sužinoti kaip elgtis su tokiais masyvais, kokie sprendimo geriausi būdai ir pan.

P.S. aš žinau, kas yra masyvas, kokia tvarka sudeliojami ir pan. tik nesuprantu kaip atlikti užduotis su juo. Iš anksto dėkui už pagalba ir pastabas ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Greitai sumetu pseudokodą, net netikrinu (tikiuosi, kad gerai supratau sąlygą :lol:). Esmė, kad suprastum nuskaitymą (bent taip daryčiau aš).

 

const int ILG = 12;
...
int nr[iLG], zaista[iLG], sedeta[iLG]
// užpildai masyvus nuliais.
...

int l; // laikų kiekis
int laikas; // vienas laikas

for (int i = 0; i < n; i++) {
   in >> nr[i];
   in >> l;
   for (int j = 0; i < l; i++) {
       in >> laikas;
       if (laikas > 0) {
           zaista[i] += laikas;
       }
       else {
           sedeta[i] += -laikas;
       }
   }
}

 

Beje, globalių kintamųjų lyg ir negalima naudoti VBE – iš esmės juos turi susikurti main'e ir visur siuntinėti į funkcijas.

Redagavo Silke
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Greitai sumetu pseudokodą, net netikrinu (tikiuosi, kad gerai supratau sąlygą :lol:). Esmė, kad suprastum nuskaitymą (bent taip daryčiau aš).

 

const int ILG = 12;
...
int nr[iLG], zaista[iLG], sedeta[iLG]
// užpildai masyvus nuliais.
...

int l; // laikų kiekis
int laikas; // vienas laikas

for (int i = 0; i < n; i++) {
   in >> nr[i];
   in >> l;
   for (int j = 0; i < l; i++) {
       in >> laikas;
       if (laikas > 0) {
           zaista[i] += laikas;
       }
       else {
           sedeta[i] += -laikas;
       }
   }
}

 

Beje, globalių kintamųjų lyg ir negalima naudoti VBE – iš esmės juos turi susikurti main'e ir visur siuntinėti į funkcijas.

Dėkui :) pasižiurėsiu :)

tikiuosi suveiks :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Beje, globalių kintamųjų lyg ir negalima naudoti VBE – iš esmės juos turi susikurti main'e ir visur siuntinėti į funkcijas.

Kas dėl globaliu kintamuju/masyvu:

 

Tai o kur nurodyta? Gal žinai šaltini?

Tvarkos apraše aš neradau, nors turbut ir neturėtu būti.

Tai jei pvz., aprašyčiau kintamuosius, masyvus main'e tai jie persiduos is vienos funkcijos i kita? ar kaip man pasielgti?

Man sakykim reikia kurti funkcijas:

  • duomenims nuskaityti
  • atrasti zaideju penkiatuka
  • rusiuoti didejimo tvarka penkiatuka
  • ilgiausiai zaidusi zaideja rasti
  • trumpiausiai zaidusi zaideja rasti

 

Tai kaip man masyvus, kintamuosius perduoti is vienos i kita? strukturas zinau, bet masyvus ir taipat kaip minejau?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Greitai sumetu pseudokodą, net netikrinu (tikiuosi, kad gerai supratau sąlygą :lol:). Esmė, kad suprastum nuskaitymą (bent taip daryčiau aš).

 

const int ILG = 12;
...
int nr[iLG], zaista[iLG], sedeta[iLG]
// užpildai masyvus nuliais.
...

int l; // laikų kiekis
int laikas; // vienas laikas

for (int i = 0; i < n; i++) {
   in >> nr[i];
   in >> l;
   for (int j = 0; i < l; i++) {
       in >> laikas;
       if (laikas > 0) {
           zaista[i] += laikas;
       }
       else {
           sedeta[i] += -laikas;
       }
   }
}

 

Beje, globalių kintamųjų lyg ir negalima naudoti VBE – iš esmės juos turi susikurti main'e ir visur siuntinėti į funkcijas.

Kazka pan., as padariau, bet del didžiausio ilgiausio žaidusio žaidėjo problema turiu :(

Gal galėtum peržiurėti?

 

U1.txt

8

9 5 7 -5 13 -4 11

7 5 -3 12 -5 17 -3

25 7 12 -3 5 -5 7 -5 3

14 5 12 -3 10 -7 8

5 1 -40

33 5 15 -5 9 -3 8

11 5 -12 8 -5 12 -3

13 5 3 -4 25 -5 3

 

#include <iostream>
#include <fstream>

using namespace std;

int n,nr[12],laikas[12],penkiatas[5],zaidek[12],sedejok[12],pirmas_laikas[12];


void skaityti() {
   int a,id=0,zaide,sedejo,plaikas=0;
   ifstream duomenys("U1.txt");
   duomenys >> n;
       for(int i=0;i<n;i++) {
           duomenys >> nr[i];
           duomenys >> laikas[i];
                   for(int j=0;j<laikas[i];j++) {
                       duomenys >> a;
                               if(a > 0) {
                                   if(a > 0 && j == 0) {
                                       penkiatas[plaikas] = nr[i];
                                       plaikas++;
                                   }
                                   zaidek[i] += a;
                               }else{
                                   sedejok[i] += a;
                               }
                   }
       }
}
void rusiuoti_penkiata() {
int laik,laik2;
   for(int i=0;i<4;i++) {
       laik = i;
       for (int j=i+1; j<5; j++) {
           if(penkiatas[laik] > penkiatas[j]){
               laik = j;
           }
           laik2 = penkiatas[laik];
           penkiatas[laik] = penkiatas[i];
           penkiatas[i] = laik2;
       }
   }
}
void zaide_ilgiausiai() {
int ilg=0,laik_id=0,nuo,temp_l,temp_nr;
   for(int i=0;i<n+10;i++) {
       nuo = i;
       for(int j=i+1;j<n;j++) {
           if(zaidek[j] < zaidek[nuo]) {
               nuo = j;
           }
       }
       temp_l = zaidek[nuo];
       temp_nr = nr[nuo];
       zaidek[nuo] = zaidek[i];
       nr[nuo] = nr[i];
       zaidek[i] = zaidek[nuo];
       nr[i] = nr[nuo];
   }
}
void irasyti() {
   ofstream rez("rez.txt");

       rez << penkiatas[0] << " " << penkiatas[1] << " " << penkiatas[2] << " " << penkiatas[3] << " " << penkiatas[4] <<endl;
       rez << nr[0] << " "<< zaidek[0];
   rez.close();
}
int main() {
       skaityti();
       rusiuoti_penkiata();
       zaide_ilgiausiai();

       irasyti();
   return 0;
}

 

Rezultatas:

9 13 14 25 33

9 31

 

Turi būti rezultatas:

9 13 14 25 33

33 32

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kalbant apie ilgiausiai žaidusį, tau net rikiuoti nereikia, tik išrinkti didžiausią reikšmę. Komentuok kodą bent kiek.

 

Beje, masyvus paduoti į funkcijas yra paprasta.

 

int Funkcija(int mas[], int n) {
   ...
}

int main() {
   int zaidejai[10];
   Funkcija(zaidejai, 10);
}

 

Lygiai taip pat gali to n neturėti globalaus, o grąžinti jį iš skaityti() ir perdavinėti į funkcijas.

 

O dėl globalių – nežinau, man tikrai atrodo, kad kažkur VBE buvo. O gal tik šiaip pamokos užduotyje. Bet, žodžiu, mus visąlaik moko taip, kad nesimėtytų globalūs :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kalbant apie ilgiausiai žaidusį, tau net rikiuoti nereikia, tik išrinkti didžiausią reikšmę. Komentuok kodą bent kiek.

 

Beje, masyvus paduoti į funkcijas yra paprasta.

 

int Funkcija(int mas[], int n) {
   ...
}

int main() {
   int zaidejai[10];
   Funkcija(zaidejai, 10);
}

 

Lygiai taip pat gali to n neturėti globalaus, o grąžinti jį iš skaityti() ir perdavinėti į funkcijas.

 

O dėl globalių – nežinau, man tikrai atrodo, kad kažkur VBE buvo. O gal tik šiaip pamokos užduotyje. Bet, žodžiu, mus visąlaik moko taip, kad nesimėtytų globalūs :)

Tame ir esme, kad bandant isgauti didziausia reiksme nieko neiseina :(

 

int max;

for(int i=0;i<n;i++) {

if(zaidek[i] > zaidek[i+1]) {
   max = i;
}

}

cout << zeidek[max]; // cia laikas kiek ilgiausiai zaide

 

Kažka tokio buvau parases bet visalaik grazina paskutini rezultata kuris yra 31

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tame ir esme, kad bandant isgauti didziausia reiksme nieko neiseina :(

 

int max;

for(int i=0;i<n;i++) {

if(zaidek[i] > zaidek[i+1]) {
   max = i;
}

}

cout << zeidek[max]; // cia laikas kiek ilgiausiai zaide

 

Kažka tokio buvau parases bet visalaik grazina paskutini rezultata kuris yra 31

Imi už masyvo ribų (paskutinėj iteracijoj i = n-1, imi i+1 == n).

 

int max_ind(int mas[], int n) {
   int max = mas[0];
   int ind = 0;
   for (int i = 1; i < n; i++) {
       if (mas[i] > max) {
           max = mas[i];
           ind = i;
       }
   }

   return ind;
}

Universali funkcija, grąžinanti didžiausio elemento indeksą (universaliau: iš indekso elementą gauti gali, iš elemento indeksą – sunkiau).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Atsakimas apie Globalius kintamuosius:

dauguma mokytojų moko taisyklingai programuoti.

Programavimo mokyme programavimo kalba yra tik pagalbinė priemonė, norint patikrinti ir ugdyti programavimo gebėjimus.

Esmė yra gebėjimas sukurti tinkamas duomenų struktūras duomenims ir rezultatams saugoti bei gebėjimas pritaikyti algoritmus darbui su duomenimis tose struktūrose.

Egzamine galima programas rašyti Pascal arba C++ programavimo kalbomis.

 

Globalūs kintamieji programą daro sunkiai modifikuojama, reikalauja iš programuotojo būti itin atidžiam, programa tampa pažeidžiama (didėja klaidų tikimybė), komandinis darbas (kai didesnę programą rašo keliese) dažnai tampa negalimas.

Globalių kintamųjų reikia vengti, jų gali būti, bet nedaug ir tai turi būti tie, kurie tikrai būtini.

 

Egzamine, konkursuose, olimpiadose yra priimta, kad kintamieji, skirti saugoti duomenis bei rezultatus, gali būti globalūs.

Visi kiti pagalbiniai kintamieji (laikini, ciklo parametrai, tarpiniai duomenų saugojimo ir pan.) privalo būti lokalūs.

Ypač tai sakytina apie ciklo parametrus.

 

Programos tekstui rašyti taikomos bendrosios rašybos taisyklės, su nedidelėmis išimtimis (specifiniai reikalavimai programavimo kalbos konstrukcijoms).

Taisyklingai rašoma programa ilgiau rašoma, tačiau joje lieka mažiau klaidų, o jas pastebėti lengviau. Rezultatas (teisinga programa) pasiekimas greičiau.

 

Vadovėlyje

R.Burbaitė ir kt. Šiuolaikiškas žvilgsnis į programavimą C++. Pasirenkamasis informacinių technologijų kursas XI-XII klasėms. Vilnius, TEV, 2011

ir

knygoje

J.Blonskis ir kt. Informacinių technologijų valstybiniam brandos egzaminui užduočių pavyzdžiai pagal atnaujintą egzaminų programą. Vilnius, TEV, 2013

 

programų tekstai pateikiami pagal sutartus reikalavimus. Prie knygų yra atmintukai, kuriuose sudėtos visų pavyzdžių ir užduočių programos.

 

Jeigu mokykla neturi, tai galima užsisakyti leidykloje: www.tev.lt

 

Rašykite, jeigu kils klausimų.

 

Sėkmės, Jonas Blonskis

 

Tai atsakimas jau aiškus :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdedu savo kodą kažkada darytą, gal pravers :)

#include <fstream>
#include <algorithm>

using namespace std;

void Skaitymas(int zaista[],int ilsetasi[], int numeris[], int& n, int startinis[]);//nuskaitymo f-ja
void Didziauias(int zaista[], int ilsetasi[],int numeris[], int n, int& max_zaista, int& max_ilsetasi);//didziausio elemento radimo f-ja
//main pradzia
int main()
{
   //kintamieji
   int numeris[12],
   zaista[12],
   ilsetasi[12],
   n, max_zaista, max_ilsetasi, startinis[5];
   ofstream fr ("U1rez.txt");

   Skaitymas(zaista,ilsetasi,numeris,n,startinis);
   Didziauias(zaista,ilsetasi,numeris,n,max_zaista,max_ilsetasi);
   sort(startinis,startinis+5);
   for (int i=0; i<5; i++) fr<<startinis[i]<<" ";

   fr<<endl<<numeris[max_zaista]<<" "<<zaista[max_zaista]<<endl<<numeris[max_ilsetasi]<<" "<<ilsetasi[max_ilsetasi]*-1;
   fr.close();
}//main pabaiga

void Skaitymas(int zaista[],int ilsetasi[], int numeris[], int& n, int startinis[])
{
   ifstream fd("U1.txt");
   int k,s,p=0;
   fd>>n;

   for (int i=0; i<n; i++)
   {
       fd>>numeris[i]>>k;
       zaista[i]=0;
       ilsetasi[i]=0;

       for(int l=0; l<k; l++)
       {
           fd>>s;
           if(s>0) zaista[i]+=s;
           else ilsetasi[i]+=s;
           if((l==0)&&(s>0))
           {
               startinis[p]=numeris[i];
               p++;
           }
       }
   }
   fd.close();
}
void Didziauias(int zaista[], int ilsetasi[],int numeris[], int n, int& max_zaista, int& max_ilsetasi)
{

   max_zaista=distance(zaista,(max_element(zaista,zaista+n))), max_ilsetasi=distance(ilsetasi,(min_element(ilsetasi,ilsetasi+n)));
   for(int i=0; i<n; i++)
   {
       if (zaista[i]==zaista[max_zaista])
       {
           if(numeris[i]<numeris[max_zaista]) max_zaista=i;

       }
       if(ilsetasi[i]==ilsetasi[max_ilsetasi])
       {
           if(numeris[i]<numeris[max_ilsetasi]) max_ilsetasi=i;
       }
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O geras :)

Kaip paprastai :)

O per egzamina taip galima? Silke atrodo minėjo, kad gali pasiroditi prieš vertintoja per protingas ir - taskai :D

aš čia kalbu apie ten esančias funkcijas kode :)

Klausiau mokytojo tai sakė jeigu tokia f-ja yra tai jos niekas nedraudžia naudoti :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O geras :)

Kaip paprastai :)

O per egzamina taip galima? Silke atrodo minėjo, kad gali pasiroditi prieš vertintoja per protingas ir - taskai :D

aš čia kalbu apie ten esančias funkcijas kode :)

Taip, yra C++ sort, C qsort() (šitą per olimpiadas naudoju ir problemų nebūna), bet reikia žiūrėti, ar prie užduoties neparašyta: „turi būti funkcija, rikiuojanti krepšininkus“ ar pan. :)

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