Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.283
|
čitano: 1.509.733
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
10 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

@KKT

 

Vrtiš petlju, sve dok te interni brojač unutar nje ne izbaci sa break naredbom van, kada je uvjet unutar naredbe if ispunjen, odnoso brojač == 30.

Velika slova i brojke kontroliš sa naredbom if pomoću samih znakova( npr. 'A' il preko ASCII vrijednosti znaka, npr za slova A, broj 65).

Panzerkampfwagen.Dinamo Zagreb.TMATIJA1.Leaving or dead, always ahead...
6 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

@PzKpfw 

 

E prijatelju,hvala na pomoci .. mada znam ja sve to,da ide preko for petlje .. 

 

Evo kako sam krenuo bio:

 

 

#include <iostream>
#include <iomanip>
using namespace std;

void main()
{
    const int vel = 30;
    char niz[vel];

 

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

    }

 


}

 

Znaci pocetak je ok,to znam :D

 

Mada cim udjem u tu petlju,if iskaz kojim cu "narediti" da se u niz spremaju samo velika slova i brojevi mi ne valja ..

Npr. pokusao sam sa ovim:

 

if(niz[i] < 65 || niz[i] >90)     ili    if(niz[i]<'A' || niz[i]>'Z') 

   i--;

 

 

Znam da je to dvoje isto,al eto probao sam oba :)

Taj uslov odlicno radi al samo za velika slova ...

Znaci tu sam stavio da ako je element niza bilo koji drugi karakter,sem velikih slova,odbacit ce se i nece biti spremljen u niz radi ovog i-- 

 

Ne znam kako da dodam jos i za brojeve,a da mi to za velika slova ostane kako treba,jer ako stavim u taj uslov jos za brojeve,onda ce to narusiti taj prvi uslov i to mi stvara veliki problem.

Poruka je uređivana zadnji put uto 22.8.2017 19:00 (KKT).
 
0 0 hvala 0
10 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

@KKT

 

Vrlo jednostavno. Naime, ovo za slova staviš u jednu zagradu, te još dodaš operator logičko slovo ILI između ta dva uvjeta.

Nešto ovakvo. ...

......if(("Uvjet da velika slova moraju biti") || ("uvjet da je znak broj"){

 

//nesto radi...

}

 

 

Samo za slova stavi ako hoće da budu velika (niz[i] >= 65 && niz[i] <=90)

Za brojke :::(niz[i] >=48 && niz[i] <=57)

 

 

Well, brojač se inicjalita vani, postavi se for petlkja da se vrti dok brojač nije jednak 30

učitaš znak, isptuiješ u if uvjete, te ako je ispuljen spremiš u svoj niz, te povečaš brojač.

 

Možeš brojač staviti i ispitivati u if, pa da te izbasci vani sa break....

Panzerkampfwagen.Dinamo Zagreb.TMATIJA1.Leaving or dead, always ahead...
Poruka je uređivana zadnji put uto 22.8.2017 19:31 (PzKpfw).
6 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

@PzKpfw 

 

E hvala,danas sam isto razmisljao i na taj nacin,da stavim te ASCII kodove i za unos brojeva,mada kontao sam da mora biti omogucen unos i visecifrenih brojeva,al izgleda da je to nemoguce postici,tako da na kraju jedino mi ovako preostaje da uradim ..

 

U svakom slucaju,pomogo si mi dosta .. sad idem dalje rjesavat,pa ako zapne,valjda se mogu obratit tu,da zajednicki rjesavamo,inace ispit mi je uskoro pa moram se spremit dobro,ne bih vas zamarao bez potrebe :) 

Poruka je uređivana zadnji put uto 22.8.2017 20:32 (KKT).
 
1 0 hvala 0
8 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
wrathchild kaže...

Znamo sve ako ti znas sto tocno ne znas ;)

Zadatak  je ovaj 

unose podaci za: ime, prezime, matični broj, datum upisa na studij i predmeti
za sve studente jedne godine (najviše 50).

Nakon unosa svih podataka potrebno je
izračunati prosjek ocjena za svakog studenta te ih ispisati na zaslon, zajedno s
pripadajućim prosjekom te ostalim poznatim podacima, studenta s najmanjim i
najvećim prosjekom.

Algoritam realizirati pomoću sloga. Koristiti metodu
sortiranja pomoću umetanja.

 

Moze pomoc oko ovog podebljanog dijela zadatka, napravio sam koliko sam znao dalje neznam kako povezati prosjek ocjena s ostalim podatcima jedne osobe

 

Unaprijed se ispricavam na necitkosti koda. Stavio sam u format "kod" i opciju "zalijepi kao tekst" i moram pritiskati "space" da uredim kod. Zanima me jel mi mozete reci jel se moze bolje posloziti kod ? 

 

#include <iostream>
#include <cstdlib>

 

using namespace std;

//unosim podatke za studenta

 

struct podatci{
  char ime[20];
  char prezime[20];
  int matbroj; 
  char datupisa[10];
  // unosim predmete za sve studente
  // 15 predmeta svaki velicine 15 znakova
  char predmeti[15][15];
  int ocjene[15]
  int prosjek[15];
};

 

 

int main()
{
  int N;

  podatci o[N];

  //Unosim broj osoba

do
{
  cout << "Unesi N: ";
  cin >> N;
}while(N < 1 || N > 50);

 

//unosim broj predmeta

int predmeti;
cout << "Koliko predmeta? :";
cin >> predmeti;

for(int i = 0; i < N; i++)
{
   //unosim podatke za osobu
   int suma = 0;
   cout << "Ime :";
   cin.getline(o[i].ime, 20);
   cout << "Prezime :";
   cin.getline(o[i].prezime, 20);
   cout << "Maticni broj :";
   cin >> o[i].matbroj;
   cout << "Datum upisa na studij: ";
   cin.getline(o[i].datupisa, 15);

//unosim predmete i ocjene za osobu

for(int j = 0; j < predmeti; j++)
{

    cout << "Unesi " << j+1 << "predmet: ";
    cin.getline(o[i].predmeti[j], 15);
    cout << "Unesi ocjenu: ";
    cin >> o[i].ocjene[j];
    suma += o[i].ocjene[j];
}

//izracunavam prosjek za osobu
float prosocjena[predmet];
o[i].prosjek[i] = (float)(suma) / predmeti;
prosocjena[i] = o[i].prosjek[i];
}

//ispis svih osoba s imenom, prezimenom, matbrojom,
//datumupisa na studij i predmete za sve studente jedne godine

for(int i = 0; i < N; i++)
{
   cout << "Ime " << o[i].ime << endl;
   cout << "Prezime " << o[i].prezime << endl;
   cout << "Maticni broj " << o[i].matbroj << endl;
   cout << "Datum upisa na studij " << o[i].datupisa << endl;
   cout << "Predmeti \t ocjene :" << endl;

//ispis svih predmeta sa ocjenama
for(int j = 0; j < predmeti; j++)
{
    cout << o[i].predmeti[j] << "\t" << o[i].ocjene[j] << endl;
}
   cout << endl;
   cout << "Prosjek " << prosocojena[i] << endl;
}


//sortiranje umetanjem
//trazimo studenta s najmanjim i najvecim prosjekom

//kako da prosocjena povezem s ostalim podatcima za osobu

cout << "Sortiranje umetanjem" << endl;
for(int i = 1; i < predmeti; i++)
{
int j = i - 1;
float pom = prosocjena[i];
while(j >= 0 && prosocjena[j] > pom)
    {
    prosocjena[j+1] = prosocjena[j--];
    }
    prosocjena[j+1] = pom;
}

//ispis studenta s najmanjim i najvecim prosjekom
//tu sam stao 


cout <<
system("pause");
return 0;
}

 

Carry on
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Dino-san kaže... 

Nakon unosa svih podataka potrebno je

izračunati prosjek ocjena za svakog studenta te ih ispisati na zaslon, zajedno s
pripadajućim prosjekom te ostalim poznatim podacima, studenta s najmanjim i
najvećim prosjekom.

 

..

 

 

Nisan proučava tvoj kod uopce, ali cu ti dati generalnu ideju.

 

1. Prosjek ocjena za svakog studenta najlakse izračunaš odmah pri unosu ocjena. Imaš jednu varijablu u koju zbrajaš sve unesene ocjene, te na kraju učitavanja taj zbroj podijeliš s ukupnim brojem ocjena. Dakle, imamo novu varijablu u strukturi u kojoj piše prosjek za danog studenta.

 

2. Ispis nebi trebao biti problem, redom ispisuješ studenta po studenta. Kako se radi o stogu, pri ispisu studenta istog moraš makniti sa stoga kako bi došao do sljedećeg. Vjerojatno ti ovi podaci više nisu potrebni, tj. cilj zadatka je samo napraviti traženi ispis. Ukoliko ćeš podatke trebati koristiti i kasnije, potrebno je imati još jedan stog u koji ćeš vratiti ovo što skidaš.

 

3. Kako pronaci najmanji i najveci prosjek ako koristimo samo jedan stog, tj. nakon skidanja studenta istog pobrišemo? U glavnom dijelu programa definiraš još dva "prazna" studenta, min_student i max_student. Kad skineš prvog studenta sa stoga, njegove podatke spremiš i u min_student i u max_student varijablu. Pri skidanju svakog sljedećeg studenta sa stoga, provjeravaš da li je njegova prosječna ocjena manja od prosječne ocjene min_student, tj. je li veća od prosječne ocjene max_student. Ukoliko je jedno od toga istinito, tj. pronaša si novi minimum ili maximum, tog studenta spremiš u pripadajuću varijablu min_student, odnosno max_student. Kad prođeš cijeli stog, u varijbli min_student i max_student imati ćeš studenta s najmanjom i najvećom prosječnom ocjenom. I onda još i njih ispišeš.

 

:)

Poruka je uređivana zadnji put sri 23.8.2017 12:20 (wrathchild).
11 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Polje "prosjek" si već dodao u svoj struct, ali ti je krivog tipa - ne treba ti int[15], nego običan float. Prosjek ocjena računaš nakon unosa pojedinog studenta i upišeš u to polje

 

    //izracunavam prosjek za osobu
    o[i].prosjek = (float)(suma) / predmeti;
}

 

Slijedeći korak je sortirati array studenata "o" po polju "prosjek". Nakon sortiranja studenti s najmanjim/najvećim prosjekom su prvi/zadnjielement arraya "o". Dodatna primjedba: ne koristim C++, ali mislim da ne možeš deklarirati podatci o[N]; pa nakon toga tražiti od korisnika da unese veličinu arraya N.

 

 

I jedan komentar na gornji post - ne traži se korištenje "stoga" (stack) nego "sloga" (struct), tako da točke 2. i 3. odgovora nisu na pravom tragu.

14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

O joj kakav previd, hvala na ispravku Bobobo-bo Bo-bobo. Koristeći obično polje zadatak je dosta jednostavniji, pa ne trebaju moje komplikacije.

 

Isprike..

Poruka je uređivana zadnji put čet 24.8.2017 2:20 (wrathchild).
6 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Bobobo-bo Bo-bobo kaže...

Polje "prosjek" si već dodao u svoj struct, ali ti je krivog tipa - ne treba ti int[15], nego običan float. Prosjek ocjena računaš nakon unosa pojedinog studenta i upišeš u to polje

 

    //izracunavam prosjek za osobu
    o[i].prosjek = (float)(suma) / predmeti;
}

 

Slijedeći korak je sortirati array studenata "o" po polju "prosjek". Nakon sortiranja studenti s najmanjim/najvećim prosjekom su prvi/zadnjielement arraya "o". Dodatna primjedba: ne koristim C++, ali mislim da ne možeš deklarirati podatci o[N]; pa nakon toga tražiti od korisnika da unese veličinu arraya N.

 

 

I jedan komentar na gornji post - ne traži se korištenje "stoga" (stack) nego "sloga" (struct), tako da točke 2. i 3. odgovora nisu na pravom tragu.

 Ovisi sve o kompajleru, meni visual studio to ne prihvaća i javlja grešku, dok na linuxu sa g++ sve ide glatko (ne sjecam se verzije g++) 

Trust nobody, become the best !
8 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Mr.ddevil kaže...
Bobobo-bo Bo-bobo kaže...

Polje "prosjek" si već dodao u svoj struct, ali ti je krivog tipa - ne treba ti int[15], nego običan float. Prosjek ocjena računaš nakon unosa pojedinog studenta i upišeš u to polje

 

    //izracunavam prosjek za osobu
    o[i].prosjek = (float)(suma) / predmeti;
}

 

Slijedeći korak je sortirati array studenata "o" po polju "prosjek". Nakon sortiranja studenti s najmanjim/najvećim prosjekom su prvi/zadnjielement arraya "o". Dodatna primjedba: ne koristim C++, ali mislim da ne možeš deklarirati podatci o[N]; pa nakon toga tražiti od korisnika da unese veličinu arraya N.

 

 

I jedan komentar na gornji post - ne traži se korištenje "stoga" (stack) nego "sloga" (struct), tako da točke 2. i 3. odgovora nisu na pravom tragu.

 Ovisi sve o kompajleru, meni visual studio to ne prihvaća i javlja grešku, dok na linuxu sa g++ sve ide glatko (ne sjecam se verzije g++) 

 Koristim code::blocks 13.12 i ne izbaciva mi grešku

Carry on
6 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Dino-san kaže...

 Koristim code::blocks 13.12 i ne izbaciva mi grešku

 Potvrda moga objašnjenja tnx, ovisi o kompajleru 

Trust nobody, become the best !
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pošto san ja malo zajeba sa stogom, evo kako treba izgledati rješenje: https://pastebin.com/L4EjeKKg

 

Odmah napomena: Koristio sam fiksne vrijednosti za broj predmeta i broj studenata radi jednostavnosti, bitna je ideja. Lako napraviš varijabilnu duljinu. Također, strukturu nadopuni sa svim varijablama koje ti trebaju.

 

Dino-san, Ako ti nešto nije jasno u mom kodu, slobodno pitaj.

 
2 0 hvala 2
8 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
KKT kaže...

Pozdrav svima,evo tek sam se registrovao tu,pa ako trebam negdje drugo postat,usmjerite me ..

 

Naime,radim jedan zadatak sa nizovima,mislim da uopste zadatak nije tezak,al evo vec na samom startu sam zapeo..

 

Evo o cemu se radi,

 

Napisati program koji omogućava unos karaktera sve dok se ne popuni niz od 30 elemenata prema sljedećim pravilima:
     • Elementi niza mogu biti samo velika slova i brojevi,
Na prvi pogled mi je izgledalo jednostavno,al nikako ne mogu da postavim uslov kako treba,a da niz prima samo velika slova i brojeve ..
Da li neko moze pomoci ?
Stvarno bih bio zahvalan ako ko zna da pomogne :D :)

 

 

Nije loše kod riješiti "pješke", zbog treninga.
Ali ovaj zadatak se vrlo lako može riješiti pomoću funkcija "isdigit()" i "isupper()".


Prva provjerava da li je znak broj tipa int ,ako jest vraća true ako nije vraća false, druga provjerava da li je znak veliki. Ako je veliki, vraća true. Ako je mali, false.

 

Postoji i islower, koja radi obrnuto.

 

Također, imaš još funkcije tolower(), toupper() koje mijenjaju veličinu znakova, isspace() koja provjerava da li je znak zapravo obični razmak, široki razmak (tab) \t, vertikalni tab \v, nova linija \n, te \f i \v za koje ne znam značenje.

 

I isblank() koja provjerava space i tab.

 

Sve funkcije se nalaze u zaglavlju cctype.
Dakle ,koristiš #include <cctype>.

 

Pripazi na postavljanje uvjeta. Npr. za funkciju isspace() "true" nema vrijednost 1 nego vrijednost 8.
False ima vrijednost 0, kao i obično.

Ne znam zašto je to tako i o čemu ovisi, ali shvatio sam da je bolje uvjet napisati kao if(nešto==true) nego if(nešto==1).

Jer true ne znači uvijek 1.

Ako negdje griješim, rado bih da me netko ispravi. I usput objasni ovo za true i false, ako zna više.

 

&quot;Ne znan ja šta je to feminizam...&quot;-S. Vuco
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Sve si super rekao. Evo za potvrdu, false je 0, true je sve sto nije 0. Ali naravno, uvijek je bolje pitati se je li nešto true ili false, nego je li 0 ili 1.

16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Bobobo-bo Bo-bobo kaže...

Polje "prosjek" si već dodao u svoj struct, ali ti je krivog tipa - ne treba ti int[15], nego običan float. Prosjek ocjena računaš nakon unosa pojedinog studenta i upišeš u to polje

 

    //izracunavam prosjek za osobu
    o[i].prosjek = (float)(suma) / predmeti;
}

 

Slijedeći korak je sortirati array studenata "o" po polju "prosjek". Nakon sortiranja studenti s najmanjim/najvećim prosjekom su prvi/zadnjielement arraya "o". Dodatna primjedba: ne koristim C++, ali mislim da ne možeš deklarirati podatci o[N]; pa nakon toga tražiti od korisnika da unese veličinu arraya N.

 

 

I jedan komentar na gornji post - ne traži se korištenje "stoga" (stack) nego "sloga" (struct), tako da točke 2. i 3. odgovora nisu na pravom tragu.

 Pa vidim da je nekakva nelogičnost, mada sam pomislio da je greška i da traže stack, bilo mi čudno tko još traži sotriranje stoga.

Inače taj pojam slog valjda nije baš čest, ali kod njega ima još takvih pojmova koji izazivaju dvojbu, npr sortiranje umetanjem, palo mi na pamet umetanje kod binarnog stabla, da bi ispalo da se radi o insertion sort.

Poruka je uređivana zadnji put pet 25.8.2017 12:18 (Floki).
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Mrzim*Pokazivače kaže...
KKT kaže...

Pozdrav svima,evo tek sam se registrovao tu,pa ako trebam negdje drugo postat,usmjerite me ..

 

Naime,radim jedan zadatak sa nizovima,mislim da uopste zadatak nije tezak,al evo vec na samom startu sam zapeo..

 

Evo o cemu se radi,

 

Napisati program koji omogućava unos karaktera sve dok se ne popuni niz od 30 elemenata prema sljedećim pravilima:
     • Elementi niza mogu biti samo velika slova i brojevi,
Na prvi pogled mi je izgledalo jednostavno,al nikako ne mogu da postavim uslov kako treba,a da niz prima samo velika slova i brojeve ..
Da li neko moze pomoci ?
Stvarno bih bio zahvalan ako ko zna da pomogne :D :)

 

 

Nije loše kod riješiti "pješke", zbog treninga.
Ali ovaj zadatak se vrlo lako može riješiti pomoću funkcija "isdigit()" i "isupper()".


Prva provjerava da li je znak broj tipa int ,ako jest vraća true ako nije vraća false, druga provjerava da li je znak veliki. Ako je veliki, vraća true. Ako je mali, false.

 

Postoji i islower, koja radi obrnuto.

 

Također, imaš još funkcije tolower(), toupper() koje mijenjaju veličinu znakova, isspace() koja provjerava da li je znak zapravo obični razmak, široki razmak (tab) \t, vertikalni tab \v, nova linija \n, te \f i \v za koje ne znam značenje.

 

I isblank() koja provjerava space i tab.

 

Sve funkcije se nalaze u zaglavlju cctype.
Dakle ,koristiš #include <cctype>.

 

Pripazi na postavljanje uvjeta. Npr. za funkciju isspace() "true" nema vrijednost 1 nego vrijednost 8.
False ima vrijednost 0, kao i obično.

Ne znam zašto je to tako i o čemu ovisi, ali shvatio sam da je bolje uvjet napisati kao if(nešto==true) nego if(nešto==1).

Jer true ne znači uvijek 1.

Ako negdje griješim, rado bih da me netko ispravi. I usput objasni ovo za true i false, ako zna više.

 

 To je naslijeđe iz C, ili ako hoćeš loša praksa iz C iz vremena kad boolean tip varijable nije postojao.

Kod novijih jezika imaš samo true i false kao boolean tipove varijabli.

 

Ali, kao i obično sve ima svoju drugu stranu, pa tako možemo ovaj izraz napisati bez operatora uspoređivanja.

Poruka je uređivana zadnji put pet 25.8.2017 12:38 (Floki).
8 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
wrathchild kaže...

Pošto san ja malo zajeba sa stogom, evo kako treba izgledati rješenje: https://pastebin.com/L4EjeKKg

 

Odmah napomena: Koristio sam fiksne vrijednosti za broj predmeta i broj studenata radi jednostavnosti, bitna je ideja. Lako napraviš varijabilnu duljinu. Također, strukturu nadopuni sa svim varijablama koje ti trebaju.

 

Dino-san, Ako ti nešto nije jasno u mom kodu, slobodno pitaj.

https://pastebin.com/raw/QVEdddMr

 

Jel mozete mi reci u cemu je greska kod sortiranja umetanjem(insertion sort) kod sortiranja clanova u slogu i cijelih slogova ?

Na izlazu izbacuje mi cudne simbole. 

 

ovo mi je na izlazu. 


https://ibb.co/h92nWk

 

Carry on
16 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Možda se pod tim pojmom sortiranje umetanjem doslovno misli na sortiranje prilikom umetanja.

Za to imamo mogućnost preko strukture i jednostruko vezane liste.

Volim koristiti sentiel node prilikom izrade vezanih listi jer ne moram raditi iznimke za pojedinačne slučajeve.

Ovo je ogledni primjerak algoritma, a tvom kodu se lako prilagodi.

 

 

#include<iostream>
#include<limits.h>
using namespace std;

typedef struct node
{
   int broj;
   node* next;
 };

int main()
{
   node* head = new node;
   head->broj = NAN;
   head->next = NULL;

   for (int i = 0; i < 5; i++)
   {
      node* temp = new node;
      cin >> temp->broj;
      node* conduct = head;
      while (conduct->next != NULL && conduct->next->broj < temp->broj)
      {
         conduct = conduct->next;
      }
      temp->next = conduct->next;
      conduct->next = temp;
   }
   node* temp = head->next;
   while (temp != NULL)
   {
      cout << temp->broj << " ";
      temp = temp->next;
   }
   while (head != NULL)
   {
      temp = head;
      head = head->next;
      delete temp;
   }
   return 0;
}

Poruka je uređivana zadnji put sub 26.8.2017 16:29 (Floki).
 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Dino-san kaže...
wrathchild kaže...

Pošto san ja malo zajeba sa stogom, evo kako treba izgledati rješenje: https://pastebin.com/L4EjeKKg

 

Odmah napomena: Koristio sam fiksne vrijednosti za broj predmeta i broj studenata radi jednostavnosti, bitna je ideja. Lako napraviš varijabilnu duljinu. Također, strukturu nadopuni sa svim varijablama koje ti trebaju.

 

Dino-san, Ako ti nešto nije jasno u mom kodu, slobodno pitaj.

https://pastebin.com/raw/QVEdddMr

 

Jel mozete mi reci u cemu je greska kod sortiranja umetanjem(insertion sort) kod sortiranja clanova u slogu i cijelih slogova ?

Na izlazu izbacuje mi cudne simbole. 

 

ovo mi je na izlazu. 


https://ibb.co/h92nWk

 

Ne znam da li imaš grešku u insertion sortu, ali program sigurno ne radi dobro jer koristiš tri različita arraya od N studenata koji nemaju veze jedan s drugim.

 

Prvo deklariraš array student o[N] u kojeg unosiš podatke, zatim deklariraš drugi array student arr[N] kojeg koristiš za sortiranje i na kraju treći array student st[N] kojeg koristiš za ispis. Samo prvi array sadrži podatke o studentima, ostala dva sadrže smeće. Varijable arr i st ti uopće ne trebaju, koristi o i za sortiranje i za ispis.

8 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

izbacio sam dva arraya arr i st i program mi radi bez problema

hvala

Carry on
8 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

odnosi se na sortiranje prebrojavanjem

zanima me jedan dio koda za objasniti 

 

oznacio sam ga s komentarom 

 

https://pastebin.com/raw/pGnCsDaT

 

sta znaci taj dio ? 

 

Carry on
Poruka je uređivana zadnji put pon 28.8.2017 10:37 (Dino-san).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Dino-san kaže...

odnosi se na sortiranje prebrojavanjem

zanima me jedan dio koda za objasniti 

 

oznacio sam ga s komentarom 

 

https://pastebin.com/raw/pGnCsDaT

 

sta znaci taj dio ? 

 

 Bitan ti je onaj dio gore gdje u niz P sa 1 zapisuješ postoji li element niza A čija vrijednost odgovara indeksu niza P, čime si u stvari izvršio sortiranje niza A.

Dvostruka petlja čita niz P i to na način da vanjska petlja čita niz P, a unutarnja pridružuje element u niz A po indeksu niza P.

Tamo gdje nemaš elemente u nizu P, unutarnju petlju preskačeš, od tud  se indeks koji zapisuje poredane elemente u niz A ikrementira jedino kad zapisuje element u niz A.

 

A 3 1 5

P 0 1 0 1 0 1

 

na  P[0] nemaš element, unutarnja petlja se ne izvršava

na  P[1] imas element, unutarnjom petljom na A[0] zapisujes 1

na  P[2] nemas element, unutarnja petlja se ne izvrsava

na  P[3] imas element, unutarnjom petljom na A[1] zapisujes 3

na  P[4] nemas element, unutarnja petlja se ne izvrsava

na  P[5] imas element, na A[2] zapisujes 5

 

Algoritam prevodi niz A u  niz P, a zatim sortirani niz P prevodi u niz A

Poruka je uređivana zadnji put pon 28.8.2017 14:48 (Floki).
8 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

E to skuzio sam =D, bit svega je da se gleda po indeksu elemenata i potom sortira niz

Carry on
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Dino-san kaže...

E to skuzio sam =D, bit svega je da se gleda po indeksu elemenata i potom sortira niz

 Druga petlja ti je nepotrebna

if(P[i]) A[k++] = i

 

Vremenska slozenost je linearna ali zato je i prostorna slozenost linearna.

Poruka je uređivana zadnji put uto 29.8.2017 21:55 (Floki).
6 godina
offline
Programiranje u C++-u - pitanja i odgovori

Problem sa zadatkon za jednog klinca

 

Učitati riječ i ispisati u prvoj liniji cijelu riječ, pa u slijedećoj liniji znak manje sa lijeva i tako do kraja riječi. Prema uzorku na slici:

 

on je napisao kod:

 

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main(){
  string rijec;
  cout << "unesite rijec"<<endl;
  getline(cin,rijec);
  cout << endl;
  int d = rijec.length();
  for (int i=0;i<d;i++){
   cout << setw(i) << rijec.substr(i,d)<<endl;
  }
  cin.ignore();
  return 0;
}

Trust nobody, become the best !
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Poruka je uređivana zadnji put sri 30.8.2017 19:10 (wrathchild).
11 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

 Druga petlja ti je nepotrebna

if(P[i]) A[k++] = i

Druga petlja je potrebna kad ulazni array ima duplikate:

 

A = 3 1 5 3

P = 0 1 0 2 0 1

 

na  P[0] nemaš element, unutarnja petlja se ne izvršava

na  P[1] imas 1 element, unutarnjom petljom na A[0] zapisujes 1

na  P[2] nemas element, unutarnja petlja se ne izvrsava

na  P[3] imas 2 elementa, unutarnjom petljom na A[1] i  na A[2] zapisujes 3

na  P[4] nemas element, unutarnja petlja se ne izvrsava

na  P[5] imas 1 element, na A[3] zapisujes 5

6 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

 Baš mi se i ne sviđa ovo tvoje rješenje, ja nisam ima vremena do sada, evo po meni "kvalitetnijeg" koda sa for 2 for petlje

 

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

int main(){
  string rijec;
  cout << "Unesite rijec ";
  getline(cin,rijec);
  int duljina = rijec.length();
  for (int i=0;i<duljina;i++){
   cout << rijec.substr(i)<<endl;
   for (int j=0;j<(i+1);j++){
    cout << " ";
   }
  }
  cin.ignore();
  return 0;
}

Trust nobody, become the best !
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ovisi sta hoces koristiti od dodatnih funkcija. Moje rijesenje je vise sirovije i skolski, tj. kako se to rjesava na faksu.

 

P.S. Ako vec znas, mislin da ti manje vremena treba za natipkati ovo, nego za postati na forum :)

Poruka je uređivana zadnji put sri 30.8.2017 23:59 (wrathchild).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Bobobo-bo Bo-bobo kaže...
Floki kaže...

 Druga petlja ti je nepotrebna

if(P[i]) A[k++] = i

Druga petlja je potrebna kad ulazni array ima duplikate:

 

A = 3 1 5 3

P = 0 1 0 2 0 1

 

na  P[0] nemaš element, unutarnja petlja se ne izvršava

na  P[1] imas 1 element, unutarnjom petljom na A[0] zapisujes 1

na  P[2] nemas element, unutarnja petlja se ne izvrsava

na  P[3] imas 2 elementa, unutarnjom petljom na A[1] i  na A[2] zapisujes 3

na  P[4] nemas element, unutarnja petlja se ne izvrsava

na  P[5] imas 1 element, na A[3] zapisujes 5

 Možemo sve prebaciti na vanjsku petlju, dok god je P[i] > 0 index i ostaje isti.

Broj elemenata niza A jednak je sumi elemenata niza P, sasvim svejedno da li iteracije vanjske petlje povećamo za broj duplikata pa broj iteracija bude velicina broja plus 1 plus broj duplikata a unutarnju petlju izbacimo.

 

if(P[i]) {A[k++] = i; P[i]--;}

if(P[i]) i--;

Poruka je uređivana zadnji put čet 31.8.2017 20:37 (Floki).
E-mail:
Lozinka:
 
vrh stranice