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

poruka: 7.285
|
čitano: 1.703.372
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
ERROR1911 kaže...
Makić kaže...

možeš naravno, al ne znam jel ima mogućnost step by step,

šta je po meni mislim nabolja stvar za nas početnike, da ide

korak po korak tako da vidiš kad se i što točno izvršava

zato koristim visual studio

 Koji verziju visual studia koristiš?

 sad vs 2013, jer mogu kao student skinit origigi od microsofta

17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
ERROR1911 kaže...

Program mogu pisati CodeBlocks? 

Mozes Code::Blocks koristiti, mozes Qt Creator, VS, Notepad++ ako zelis - samo u tom slucaju morat ces sam rucno kompajlirati u terminalu, tj. cmdu sto je za apsolutnog pocetnika mozda ipak malo previse, jer ovi programi prije navedeni sve to obave za tebe u pozadini. No, kad jednom stasaš, svakako je dobro, dapace ja bih rekao da bi trebao znati kako to funkcionira ispod haube (predprocesor, kompajler, linker...) i da znas to reproducirati sam u terminalu.

 

Ali za sam pocetak uzmi vec kompletan IDE koji god zelis - C::B, Qt Creator, VS, svejedno je, s tim da su svi navedeni sto se tice megabajta puno laksi od VS-a (VS ima par gigabajta ako se ne varam jer ima tonu alata koji ti iskreno trenutno NE trebaju), pa mozda ipak da ne krenes odmah s VS-om, ali apsolutno je na tebi i tvojim zeljama kako god ti hoces.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav... Moze li mi netko pojasniti ,napisati algoritam za izracunavanje kombinacija odredenih slova i brojeva 

McLaren Mercedes:1974.Emerson Fittipaldi-1976.James Hunt-1984.Niki Lauda-1985.-1986.Alain Prost-1988.Ayrton Senna-1989.Alain Prost-1990.-1991.-Ayrton Senna-1998.-1999.Mika Hakkinen-2008.Lewis Hamilton
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
loky4i4 kaže...

Pozdrav... Moze li mi netko pojasniti ,napisati algoritam za izracunavanje kombinacija odredenih slova i brojeva 

 Misliš na računanje svih permutacija zadanog niza ili?

15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
wrathchild kaže...
loky4i4 kaže...

Pozdrav... Moze li mi netko pojasniti ,napisati algoritam za izracunavanje kombinacija odredenih slova i brojeva 

 Misliš na računanje svih permutacija zadanog niza ili?

 Znaci imam polje sa recimo a,b,c,3 , htio bih dobiti sve moguce kombinacije duljine npr. 6 znakova ...aaaaaa,aaaaab itd.

McLaren Mercedes:1974.Emerson Fittipaldi-1976.James Hunt-1984.Niki Lauda-1985.-1986.Alain Prost-1988.Ayrton Senna-1989.Alain Prost-1990.-1991.-Ayrton Senna-1998.-1999.Mika Hakkinen-2008.Lewis Hamilton
Poruka je uređivana zadnji put čet 25.6.2015 13:36 (loky4i4).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Za šta ti to treba?

I jel moraš razlikovati "aaaaab" i "aaaaba" ili ti je isto?

 
0 0 hvala 0
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Htio bi napraviti dictionary za bruteforce , evo recimo da imamo dva slova, sifra duljine 2 znaka znaci trebao bi dobiti aa,ab,ba,bb

McLaren Mercedes:1974.Emerson Fittipaldi-1976.James Hunt-1984.Niki Lauda-1985.-1986.Alain Prost-1988.Ayrton Senna-1989.Alain Prost-1990.-1991.-Ayrton Senna-1998.-1999.Mika Hakkinen-2008.Lewis Hamilton
Poruka je uređivana zadnji put čet 25.6.2015 13:52 (loky4i4).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Hmm.. napraviš ko onaj kružni lokot za biciklu :D i vrtis redom, to mi ovako prvo pada napamet, najjednostavnije.

 

Definiras si abecedu, tj znakove koje koristis i ides redom od prvog do zadnjeg.

Npr da su to samo brojevi od 0 do 9. I duljina npr 5. Na pocetku stavis sve na 0:

0 0 0 0 0

U petlji vrtiš zadnju znamenku do 9, a nakon 9 opet stavis nulu ali povecas sljedecu znamenku za 1. (Kad ta sljedeca bude 9, a moras povecati, stavis je na nulu i ides na iducu)

0 0 0 0 1

..

0 0 0 0 9

0 0 0 1 0

..

0 0 0 9 9

0 0 1 0 0

 

Tako ces redom proci sve kombinacije. .

To mi je neka ideja ovako na brzinu. Ti mozes definirati svoju abecedu, tj svoje znakove koje ces vrtiti (spremiti u neki niz) i raditi istu stvar, od prvog do zadnjeg znaka, a kad stignes do zadnjeg, vratis ga na prvog i povecas sljedeceg.

 

Ali pripazi, ovo izvođenje ce trajati dosta dugo, pogotovo za veliku abecedu i veliki broj polja.

Poruka je uređivana zadnji put čet 25.6.2015 14:04 (wrathchild).
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
loky4i4 kaže...

Htio bi napraviti dictionary za bruteforce , evo recimo da imamo dva slova, sifra duljine 2 znaka znaci trebao bi dobiti aa,ab,ba,bb

 Za takve stvari bi trebao znati primjeniti rekurziju kod varijacija sa ponavljanjem.

Dobra vijest jest da su ovo varijacije sa ponavljanjem, jer ne moramo pamtiti varijacije, samo raspaliti rekurziju.

Dakle, prouči malo primjenu rekurzije kod varijacija.

 

Poruka je uređivana zadnji put čet 25.6.2015 21:17 (Floki).
9 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav

Trebala bi mi mala pomoć sa jednim zadatkom.

povezana lista

 

Znači: iz već zadane povezane liste trebam ukloniti član sa predzadnje pozicije i dodati član na drugu poziciju.

 

 

 
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Nije dobra programerska praksa da pišeš specifične metode tipa obrisi predzadnji ili dodaj drugi. Metode treba poopćiti što više, dakle u ovom slučaju napisati metode dodaj i obrisi na poziciji.

Do pozicije predzadnji dođeš da prebrojiš elemente u listi. Nisam pisao obavijesti, ali po povratnoj vrijednosti metoda možeš provjeriti da li je brisanje ili stavljanje na poziciju uspjelo. Tebi trebaju ova dva zadnja metoda, ukloniPozicija i dodajPozicija. Koristio sam OOP, ali, vrlo lako ovo prevedeš u proceduru, bitan je algoritam. Metod ukloniPozicija se oslanja na broj elemenata u listi, a metod dodajPozicija na zadanu poziciju na koju treba dodati element.

 

 

#include <iostream>

struct cvor
{
   int info;
   cvor* next;
};
class lista
{
public:
   lista() { korijen = NULL; }
   ~lista();
   cvor* noviCvor();
   void dodajNaKraj(int);
   bool ukloniSaKraja();
   void ispis();
   int dajBroj() { return broj; }
   bool ukloniPozicija(int);
   bool dodajPozicija(int, int);

private:
   cvor* korijen;
   int n, broj;
};
lista::~lista()
{
   if (korijen != NULL)
   {
      cvor* temp = korijen, *element;
      while (temp->next != NULL)
      {
         element = temp;
         temp = temp->next;
         delete element;
      }
   }
}
cvor* lista::noviCvor()
{
   cvor* novi = new cvor();
   novi->info = this->n;
   novi->next = NULL;
   broj++;
   return novi;
}
void lista::dodajNaKraj(int n)
{
   this->n = n;
   if (korijen == NULL)
   {
      korijen = noviCvor();
      return;
   }
   cvor* temp = korijen;
   while (temp->next != NULL)
      temp = temp->next;
   temp->next = noviCvor();
}
bool lista::ukloniSaKraja()
{
   if (korijen == NULL) return false;
   if (korijen->next == NULL)
   {
      delete korijen;
      broj--;
      korijen = NULL;  
      return true;
   }
   cvor* temp = korijen;
   while (temp->next->next != NULL)
      temp = temp->next;
   delete temp->next;
   broj--;
   temp->next = NULL;
   return true;
}
void lista::ispis()
{
   cvor* temp = korijen;
   while (temp != NULL)
   {
      std::cout << temp->info << std::endl;
      temp = temp->next;
   }
   std::cout << std::endl;
}
bool lista::ukloniPozicija(int n)
{
   if (broj < n || broj == 0 || n < 1) return false;
   cvor* prev = korijen, *temp=korijen;
   if (n == 1) { korijen = temp->next; delete temp; broj--; return true; }
   while (n-1  > 0)
   {
      prev = temp;
      temp = temp->next;
      n--;
   }
   prev->next = temp->next;
   delete temp;
   broj--;
   return true;
}
bool lista::dodajPozicija(int data, int pozicija)
{
   this->n = data;
   if (pozicija > broj + 1 || pozicija <= 0) return false;
   cvor* novi  = noviCvor();
   if (pozicija == 1) { novi->next = korijen; korijen = novi; return true; }
   cvor* temp = korijen;
   while (pozicija - 2 > 0)
   {
      temp = temp->next;
      pozicija--;
   }
   novi->next = temp->next;
   temp->next = novi;
   return true;
}
int main()
{
   int predzadnji;
   lista l;
   l.dodajNaKraj(5);
   l.dodajNaKraj(8);
   l.dodajNaKraj(9);
   predzadnji = l.dajBroj()-1;
   l.ukloniPozicija(predzadnji);
   l.dodajPozicija(15, 2);
   l.ispis();
   return 0;
}

Poruka je uređivana zadnji put čet 16.7.2015 12:58 (Floki).
 
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Evo da ispravim sam sebe, pošto sam uočio grešku.

 

bool lista::ukloniSaKraja()
{
   if (korijen == NULL) return false;
   if (korijen->next == NULL)
   {
      delete korijen;
      broj--;
      korijen = NULL;  
      return true;
   }
   cvor* temp = korijen;
   while (temp->next->next != NULL)
      temp = temp->next;
   delete temp->next->next;
   broj--;
   temp->next = NULL;
   return true;
}

 

Kod ovog metoda namjera mi je bila da zaustavim temp cvor na cvor ispred zadnjeg cvora kojeg hoću obrisati. To sam postigao, međutim nisam obrisao zadnji cvor, nego brisao null vrijednost iza njega, na što se prevoditelj nije bunio. Pošto sam u sljedećoj liniji zadnjeg namjestio na null, kod testiranja se greška ne može otkkriti a radi se o memory leaku-u. Suptilna greška koju ne mogu otkriti ničim, zato je memory leak tako opasan.

 

Ispravan kod izgleda ovako:

 

bool lista::ukloniSaKraja()
{
   if (korijen == NULL) return false;
   if (korijen->next == NULL)
   {
      delete korijen;
      broj--;
      korijen = NULL;  
      return true;
   }
   cvor* temp = korijen;
   while (temp->next->next != NULL)
      temp = temp->next;
   delete temp->next;
   broj--;
   temp->next = NULL;
   return true;
}

 

Ispričavam se ako sam koga doveo u zabludu, s vremena na vrijeme, ne često, ispravim tuđi kod, ne iz loše namjere, nego da naučimo nešto svi skupa, i da ne učimo krivo, pa sebi neću dati popust.

Ispravljeno u izvornom kodu.

 

 

 

 

 

 

 

 

 

Poruka je uređivana zadnji put čet 16.7.2015 13:02 (Floki).
 
0 0 hvala 0
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

int red = 1, stupac;

for (int i = 0; i < 5; i++)
{
stupac = rand() % 10;
p[red][stupac] = prepreke;     //fatalna linija koda
red++;
cout << "RED JE " << red << " a stupac je " << stupac << endl;
}

 

Zašto mi breaka program na ovoj fatalnoj liniji koda? I to nešto vezano uz varijablu red...

 

EDIT: Varijabla prepreke je definirana kao i polje p, ali sam zaboravio staviti :/

 

char prepreke = 'T';

char p[7][10];

...The South Will Rise Again... White -h- boys
Poruka je uređivana zadnji put uto 21.7.2015 18:18 (Coder256).
Moj PC  
0 0 hvala 0
13 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Nigdje u kodu ne vidim da je definirana varijabla "prepreke".

15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
AntonioStipic12 kaže...

Nigdje u kodu ne vidim da je definirana varijabla "prepreke".

 Editirano...

...The South Will Rise Again... White -h- boys
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

A sto ti se kod te fatalne linije ispise kao greska?

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Evo ovo:

 

...The South Will Rise Again... White -h- boys
Moj PC  
0 0 hvala 0
13 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Mislim da je problem u tome sto kada definiras tu varijablu ona zapravo zauzima mjesto na disku ali nema dopustenje. Zato moras koristiti new[] u C++ ili malloc() u C. Imas vise o tome i objasnjenje na ovim linkovima: 1 i 2

Poruka je uređivana zadnji put uto 21.7.2015 19:00 (AntonioStipic12).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Indeksi su vjerojatno izvan dosega, a da bi se to provjerilo treba vidjeti deklaraciju polja 'p'.

 

Ako ništa drugo koristi debug tj. breakpoint pa gledaj što se događa na toj liniji.

Poruka je uređivana zadnji put uto 21.7.2015 21:18 (TracerCPP).
Moj PC  
1 0 hvala 0
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Oćeš reć da je problem u deklariraju polja i da se to triba učinit dinamički?

Ali kad ja umjesto red i stupac stavim obične brojke, to sve funkcionira uredno...

 

Rješio sam ja to na drugi način, ali me baš zanima zašto mi nije dalo na onaj način...

...The South Will Rise Again... White -h- boys
Moj PC  
0 0 hvala 0
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Indeksi su vjerojatno izvan dosega, a da bi se to provjerilo treba vidjeti deklaraciju polja 'p'.

 char p[7][10];
char igrac = 'G', prepreke = 'T', cilj = 'X';
int red1 = 0, stupac1 = 4; 
int red2 = 1, stupac2;
int red3 = 6, stupac3 = 9; 

 

Izvoliš...

 

Da napomenem, to je sve unutar klase.

...The South Will Rise Again... White -h- boys
Poruka je uređivana zadnji put uto 21.7.2015 21:19 (Coder256).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Jesi napravio breakpoint na toj liniji i prošao kroz debug? Jasno ti onda mora pisati koje su vrijednosti varijabli u trenutku prekida programa.

15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Sad mi ta linija koda radi, ali zapinje na drugoj. Evo cijeli konstruktor...

polje::polje()
{
   srand(time(NULL));
   for (int i = 0; i < 8; i++)
   {
     for (int j = 0; j < 11; j++)
       p[i][j] = '.';
   }
   for (int i = 0; i < 5; i++)
   {
     stupac2 = rand() % 10;
     p[red2][stupac2] = prepreke;
     red2++;
     cout << "RED JE " << red2 << " a stupac je " << stupac2 << endl;
   }
   p[red1][stupac1] = igrac;       //sad na ovoj liniji baca break
   p[red3][stupac3] = cilj;
}

 

A vrijednosti reda1 su 774778414, a stupca1 46.

Dok su na sljedećoj liniji koda red3 i stupac3 sasvim uredni.

...The South Will Rise Again... White -h- boys
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Dakle, problem je u varijabli red1 koja vjerojatno nije inicijalizirana prije upotrebe.

15 godina
offline
Programiranje u C++-u - pitanja i odgovori

class polje
{
   char p[7][10];
   char igrac = 'G', prepreke = 'T', cilj = 'X';
   int red1 = 0, stupac1 = 4; 
   int red2 = 1, stupac2; 
   int red3 = 6, stupac3 = 9; 

public:
   polje();
   void prikaz();
   void unos(int);
   int provjera();
};

 

 

 

...The South Will Rise Again... White -h- boys
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

I sad iz tebe treba izvlačiti liniju po liniju. Pa daj stavi onda cijeli kod odjednom a ne na slamku da se izlači gdje si ti što deklarirao i kako inicijalizirao.

 

Uostalom, nauči se koristiti debuger. Imaš step-by-step opciju pa idi liniju po liniju koda i vidjeti ćeš zašto ti ta varijabla nije inicijalizirana.

17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Coder256 kaže...

Sad mi ta linija koda radi, ali zapinje na drugoj. Evo cijeli konstruktor...

polje::polje()
{
   srand(time(NULL));
   for (int i = 0; i < 8; i++)
   {
     for (int j = 0; j < 11; j++)
       p[i][j] = '.';
   }
   for (int i = 0; i < 5; i++)
   {
     stupac2 = rand() % 10;
     p[red2][stupac2] = prepreke;
     red2++;
     cout << "RED JE " << red2 << " a stupac je " << stupac2 << endl;
   }
   p[red1][stupac1] = igrac;       //sad na ovoj liniji baca break
   p[red3][stupac3] = cilj;
}

 

A vrijednosti reda1 su 774778414, a stupca1 46.

Dok su na sljedećoj liniji koda red3 i stupac3 sasvim uredni.

Prva stvar, inicijalizirao si matricu 7*10, a ovdje u for petljama ides po matrici 8*11 (boldano). Vozis po zabranjenoj memoriji, ispravi to.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...
Coder256 kaže...

Sad mi ta linija koda radi, ali zapinje na drugoj. Evo cijeli konstruktor...

polje::polje()
{
   srand(time(NULL));
   for (int i = 0; i < 8; i++)
   {
     for (int j = 0; j < 11; j++)
       p[i][j] = '.';
   }
   for (int i = 0; i < 5; i++)
   {
     stupac2 = rand() % 10;
     p[red2][stupac2] = prepreke;
     red2++;
     cout << "RED JE " << red2 << " a stupac je " << stupac2 << endl;
   }
   p[red1][stupac1] = igrac;       //sad na ovoj liniji baca break
   p[red3][stupac3] = cilj;
}

 

A vrijednosti reda1 su 774778414, a stupca1 46.

Dok su na sljedećoj liniji koda red3 i stupac3 sasvim uredni.

Prva stvar, inicijalizirao si matricu 7*10, a ovdje u for petljama ides po matrici 8*11 (boldano). Vozis po zabranjenoj memoriji, ispravi to.

 Da, ta glupa greška je uzrokovala sve...

...The South Will Rise Again... White -h- boys
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Koju literaturu preporucujete za pocetnike?

Cini mi se kao odlican rodjendanski poklon frendu koji je odlucio da uci programiranje :D

AL SWEARENGEN Welcome to fucking Deadwood!
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
chaselol kaže...

Koju literaturu preporucujete za pocetnike?

Cini mi se kao odlican rodjendanski poklon frendu koji je odlucio da uci programiranje :D

http://www.bug.hr/forum/topic/programiranje/literatura-programiranje/117438.aspx

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
E-mail:
Lozinka:
 
vrh stranice