c++ problem

Hardware, software, mobiteli, programiranje, internet...

Moderator: Bobi

Post Reply
krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

c++ problem

Post by krajisnik11 » 08/01/2012 16:41

Pozdrav forumasi, imam jedan problem sa rjesavanjem c++ zadatka, tekst zadatka je sljedeci:

Napisati program koji generiše niz od N cijelih brojeva. Brojevi se generišu na sljedeći način:
Korisnik unosi broj NIZ[0] i cijeli broj R koji predstavlja razliku između sljedećeg i prethodnog broja u
nizu. Nakon toga unosi N cijeli broj koji predstavlja veličinu niza. Na izlazu se ispisuje zadnji broj u
generisanom nizu.

Primjer izvršavanja:
Ulaz:
8 3 10
Izlaz:
35
Objašnjenje:
Na osnovu ulaza, generisan je sljedeci niz: 8 11 14 17 20 23 26 29 32 35 te je 10. element niza rjesenje.

Programu je potrebno implementirati funkciju za generisanje niza: int* generisi(int prviElement, int razlika, int duzina), koja ce na kraju generisanja vratiti memorijsku adresu prvog elementa generisanog niza.

Ja mislim da sam dobro napravio dio programa koji vraca mem. adresu prvog elementa niza:
#include<iostream.h>
using namespace std;

int* generisi(int prvi, int razlika, int duzina){
int *niz = new int[duzina], i;
for (int i=prvi;i<=duzina;i=i+razlika){
niz=i;}
return niz;}

int main(){
int a, b, c;
cin >> a>>b>>c;
cout << generisi(a, b, c);
system("pause");}

ako je to dobro, kako onda da iz toga dobijem zadnji element u nizu


User avatar
nellington
Posts: 10761
Joined: 11/03/2008 13:32
Location: navedeno lice se udaljilo u nepoznatom pravcu.

Re: c++ problem

Post by nellington » 08/01/2012 16:48

Aritmetika pokazivača, uvećanje pokazivača za dužinu niza?

P. S. funkcija loše radi, razdvoji brojač i sadržaj niza (neka se i normalno inkrementira), a neka se niz puni preko druge varijable (ili preko prethodne vrijednosti u nizu ili preko a0+n*d formule za aritmetičku progresiju.

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 08/01/2012 19:00

pa mozes li mi pomoci onda, znam ja teoretski uraditi ovaj program, al mi ovi pokazivaci bas neidu pa ga onda neznam implementirati

User avatar
nellington
Posts: 10761
Joined: 11/03/2008 13:32
Location: navedeno lice se udaljilo u nepoznatom pravcu.

Re: c++ problem

Post by nellington » 08/01/2012 19:07

Idemo :)

Code: Select all

#include<iostream.h>
using namespace std;

int* generisi(int prvi, int razlika, int duzina){
int *niz = new int[duzina], i;
[b]for (int i=prvi;i<=duzina;i=i+razlika){
niz[i]=i;}[/b]
return niz;}

int main(){
int a, b, c;
cin >> a>>b>>c;
[b]cout << generisi(a, b, c);[/b]
system("pause");}
Boldirano neće na dobro. Pošto ćeš biti zadovoljniji ako sam uradiš zadatak, ja ću ti samo dati pointere (no pun intended :D).

1. For petlja neka ide kao i=0;i<duzina;i++ a pri tome niz=prvi+i*razlika; (eto, ovo smo čak i praktično riješili!)
2. Pokazivač na prvi član niza si dobro vratio. Neka je taj pokazivač a. Tada je *a prvi član niza, *(a+1) sljedeći, odnosno drugi... i tako redom, *(a+n) je n+1vi član ako usvojimo konvenciju da početni član u nizu zovemo prvim a ne nultim. Sad ovo iskodiraj, kompajliraj, pa ako ne radi, javi.
3. Ako si navikao da n-ti član niza uzimaš kao niz[n-1], može i to da se radi s pokazivačem! Slobodno probaj, tad ti ne treba *.

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 08/01/2012 19:29

nisam skonto bas najbolje to sto govoris za main funkciju, ali evo sta sam uradio, na izlazu dobijem 0:

Code: Select all

#include<iostream.h>
using namespace std;

int* generisi(int prvi, int razlika, int duzina){
     int *niz = new int[duzina], i;
     for (i=0;i<duzina;i++){
         niz[i]=prvi+i*razlika;
         return niz;}}
         
int main(){
    int a, b, c, e;
    cin >> a>>b>>c;
    int *d=generisi(a, b, c);
    e=*(d+b);
    cout << e;
    
    
    
    system("pause");}

User avatar
nellington
Posts: 10761
Joined: 11/03/2008 13:32
Location: navedeno lice se udaljilo u nepoznatom pravcu.

Re: c++ problem

Post by nellington » 08/01/2012 19:33

Jesi htio d+b ili d+c-1?

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 08/01/2012 19:39

Code: Select all

#include<iostream.h>
using namespace std;

int* generisi(int prvi, int razlika, int duzina){
     int *niz = new int[duzina], i;
     for (i=0;i<duzina;i++){
         niz[i]=prvi+i*razlika;
         return niz;}}
         
int main(){
    int a, b, c, e;
    cin >> a>>b>>c;
    int *d=generisi(a, b, c);
    e=*(d+(c-1));
    cout << e << endl;
    
    
    
    system("pause");}
    
opet nula

User avatar
nellington
Posts: 10761
Joined: 11/03/2008 13:32
Location: navedeno lice se udaljilo u nepoznatom pravcu.

Re: c++ problem

Post by nellington » 08/01/2012 19:42

Krivo zatvorena for petlja (for se ne završava nakon return, nego prije). Usput, već ti rekoh, d[c-1] ima isti efekat ako ti je lakše i logičnije tako pisati :)

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 08/01/2012 19:45

#include<iostream.h>
using namespace std;

int* generisi(int prvi, int razlika, int duzina){
int *niz = new int[duzina], i;
for (i=0;i<duzina;i++){
niz=prvi+i*razlika;}
return niz;}

int main(){
int a, b, c, e;
cin >> a>>b>>c;
int *d=generisi(a, b, c);
e=d[c-1];
cout << e;



system("pause");}


evo ga, hvala puno druze, svaka ti dala :D

User avatar
nellington
Posts: 10761
Joined: 11/03/2008 13:32
Location: navedeno lice se udaljilo u nepoznatom pravcu.

Re: c++ problem

Post by nellington » 08/01/2012 19:47

krajisnik11 wrote:
#include<iostream.h>
using namespace std;

int* generisi(int prvi, int razlika, int duzina){
int *niz = new int[duzina], i;
for (i=0;i<duzina;i++){
niz=prvi+i*razlika;}
return niz;}

int main(){
int a, b, c, e;
cin >> a>>b>>c;
int *d=generisi(a, b, c);
e=d[c-1];
cout << e;



system("pause");}


evo ga, hvala puno druze, svaka ti dala :D


vode iz bokala :)

Sretno - i ubuduće zapamti - knjiga/internet i kompajler su ti najbolji prijatelji. Zapamtićeš koncepte ako se oko njih napatiš :)

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 08/01/2012 19:49

nije mi palo na pamet ono sto si na i dodao adresu razlike, jako mudro

User avatar
nellington
Posts: 10761
Joined: 11/03/2008 13:32
Location: navedeno lice se udaljilo u nepoznatom pravcu.

Re: c++ problem

Post by nellington » 08/01/2012 19:50

To nije adresa - to je množenje :-?

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 08/01/2012 22:00

nellington wrote:To nije adresa - to je množenje :-?
haha, dobro, malo sam se prosuo al nema veze :D :D

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 11/01/2012 17:42

imam jos jedan problem u vezi drugog programa, ulaz mi mora izgledati ovako: dd.mm (dd=dani, mm=mjeseci), znaci tacno ovako kako sam napisao mora mi izgledati ulaz.
ja sam napravio da se odvojeno upisuje i onda da se ispise dd.mm ali profesor mi rece da upis mora izgledati dd.mm, rekao mi je da istrazim stringove i da to rijesim, al bas nemam ideje kako bi to moglo biti. Kako sam shvatio u istoj liniji koda mora se nalaziti i ulaz i izlaz, ulaz za varijable a izlaz za ove tacke.
Ima li neko rjesenje za ovo

savsvoj
Posts: 512
Joined: 13/01/2009 17:55

Re: c++ problem

Post by savsvoj » 11/01/2012 20:19

int ti kupi sve broje do prvog znaka tako da bi trebao kupiti int chat int char int

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 11/01/2012 22:00

da, ali kako da napisem u istom redu dd.mm. Fazon je sto kad upises dd onda se pored dd treba ispisati tacka i odmah poslije tacke se upisuje mm i opet ide tacka. Neznam kako da iskombiniram cin i cout a da sve bude lijepo u istom redu

mrgreen
Posts: 1087
Joined: 12/05/2008 21:11
Has thanked: 1 time
Been thanked: 1 time

Re: c++ problem

Post by mrgreen » 11/01/2012 22:48

pa stavis da se unosi jednom kao string, i onda parsiras string. valjda

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 11/01/2012 23:36

e pa znam i ja teoretski, al treba to implementirati ;)

User avatar
davorf
Posts: 11086
Joined: 15/02/2008 15:53
Location: lost in thought and lost in time while the seeds of life and the seeds of change were planted...

Re: c++ problem

Post by davorf » 12/01/2012 11:22

krajisnik11 wrote:e pa znam i ja teoretski, al treba to implementirati ;)
Da ne lupam sad sintaksu, posto ne radim u C++, ali moglo bi se uraditi ovako. Ulaz ti je jedan string...u koji onda kucas tu tacku izmedju dd i mm. Onda funkcijom za poziciju karaktera (cini mi se da je find funkcija) nadjes poziciju tacke. Prvi integer ti je lijevi dio stringa(string, pozicija - 1), a drugi je desni dio string (string, duzina stringa - pozicija). Ovo ukoliko nemas tacku na kraju. Ako ima tacka iza mm, onda ovaj drugi dio prebaci u novu varijablu, pa ponovo trazis poziciju tacke, i drugi integer je lijevi dio string(string, pozicija - 1). Ako sam sta lupio i ima jednostavniji nacin, ne zamjerite, ne radim u C++ :roll:

krajisnik11
Posts: 11
Joined: 05/01/2012 21:22

Re: c++ problem

Post by krajisnik11 » 13/01/2012 18:01

rijesio sam :D

Post Reply