Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa funkcijom - unhandled exception...

[es] :: C/C++ programiranje :: Problem sa funkcijom - unhandled exception...

[ Pregleda: 1995 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Alexandar90
Aleksandar Bukvić
Bežanijska Kosa, NBgd

Član broj: 177092
Poruke: 16
93.86.16.*



Profil

icon Problem sa funkcijom - unhandled exception...18.01.2009. u 19:46 - pre 185 meseci
Pokusao sam da napravim f-ju koja ce sortirati niz u rastuci poredak:

Code:

#include <iostream>
using namespace std;
void sort (int n,int niz[]);

int main()
{
    int n,y[10000];

    y[1]=5;y[2]=4;y[3]=3;n=3; /*primer*/
    cout<<y[1]<<y[2]<<y[3]<<endl;
    
        sort(n,y); /*sortiranje niza; n je broj clanova niza koji treba sortirati*/
    cout<<y[1]<<y[2]<<y[3];
    system ("pause");
  return 0;
  
 }

void sort (int n,int niz[])
{
    int i,j,p;
    
    for (i=1;i<n;i++)
        for (j=i+1,j<n+1;j++;)
        {
            if (niz[i]<niz[j])
            {
                p=niz[i];niz[i]=niz[j];niz[j]=p; /*zamena mesta clanovima niza ukoliko je prethodni veci od narednog*/
            }
        }

}


Naime, f-ja sort uporedjuje svaki prethodni clan niza sa svakim sledecim, i ukoliko je prethodni clan manji od narednog, njima se zamene mesta.
Npr: niz je 3,1,2. Prvo uporedjuje 3 i 1, pa oni zamene mesta (niz je sada 1,3,2). Zatim uporedjuje 1 i 2, redosled ostaje isti. Onda uzima drugi clan niza, tj. 3 i uporedjuje ga sa 2; posto je 3 vece, menjaju im se mesta, a niz postaje 1,2,3.

Kada ovaj kod za sortiranje stavim u glavni deo programa, 'main', on odradi posao, ali kada je napisan kao funkcija program prijavi gresku: unhandled exception...access violation.

U cemu je problem?
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Problem sa funkcijom - unhandled exception...19.01.2009. u 11:18 - pre 185 meseci
Da ne ulazim u sve detalje oko toga zasto je ovo ocajno los kod glavna greska je ovde:

Code:

for (j=i+1,j<n+1;j++;)


Treba da bude ovako:

Code:

for (j=i+1 ; j<n ; j++)


Ali glavna greska je pretpoostavka da nizovi u c-u idu od 1. Standardno nizovi pocinju od nule tako da bi prociscen kod izgledao ovako:

Code:

#include <iostream>

void sort (int n,int niz[]);

void dump(int n, int niz[]) {
    for (int pos = 0; pos < n; pos++) {
        std::cout << niz[pos];
    }
    std::cout << std::endl;
}

int main(void)
{
    int n = 3;
    int y[3] = {5,4,3};

    dump(3,y);

    sort(n,y); /*sortiranje niza; n je broj clanova niza koji treba sortirati*/

    dump(3,y);

    std::cin.get();

    return 0;
}

void sort (int n,int niz[])
{
    int p = 0;

    for (int i=0 ; i<n ; i++) {
        for (int j=i+1 ; j<n ; j++)
        {
            if (niz[i]<niz[j])
            {
                p=niz[i];
                niz[i]=niz[j];
                niz[j]=p; /*zamena mesta clanovima niza ukoliko je prethodni veci od narednog*/
            }
        }
    }
}

Tko leti vrijedi
 
Odgovor na temu

Alexandar90
Aleksandar Bukvić
Bežanijska Kosa, NBgd

Član broj: 177092
Poruke: 16
93.86.96.*



Profil

icon Re: Problem sa funkcijom - unhandled exception...19.01.2009. u 12:04 - pre 185 meseci
Hvala na pomoci, sada radi.
Znam da je kod sra*e, to je zato sto sam funkciju sort iskopirao iz drugog programa da bi bilo preglednije, a ovu 'main' sam sklepao za minut, cisto da proverim da li radi. A i tako sam nov u ovome, jos treba da ucim.
Inace, kao sto ste rekli, gresku sam napravio u pisanju, kada sam stavio ',' tamo gde je trebalo ';', i jos sam na kraju bez potrebe stavio ';':
Code:
for (j=i+1,j<n+1;j++;)

Katastrofa.
I da, treba n+1, zato sto onda ide do poslednjeg clana niza, a kada je samo n ide do pretposlednjeg (zato sto je znak <). U prvoj petlji treba da ide do pretposlednjeg, a u drugoj do poslednjeg, da ne bi uporedjivao poslednji sa samim sobom.
A uzeo sam da niz krece od [1], zato sto mi je tako bilo lakse (logicno je da 5-i clan niza ima oznaku c[5], a ne c[4]), a mislim da je svejedno od kog ce clana kretati.
Sve u svemu, hvala jos jednom!
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.eunet.rs.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Problem sa funkcijom - unhandled exception...22.01.2009. u 12:10 - pre 185 meseci
Pa, nije baš svejedno od kog će se člana kretati. Ako krećeš od keca, gubiš memorijski prostor rezervisan za nulti element niza (za razliku od Pascala gde možeš da definišeš indeks početnog elementa niza, u p. jeziku C indeks prvog elementa je fiksiran na nulu). Dalje, valjalo bi se pridržavati nekih standarda pisanja programa. Prvi put srećem fragment koda pisan u C u kome se nizovi numerišu od keca. Može dovesti do velike zabune pri održavanju koda.

I poslednje: Meni je logično da se sve broji od nule :). Što bi rekao moj kolega: "Zaokružimo na 1024." :)
 
Odgovor na temu

Alexandar90
Aleksandar Bukvić
Bežanijska Kosa, NBgd

Član broj: 177092
Poruke: 16
79.101.216.*



Profil

icon Re: Problem sa funkcijom - unhandled exception...22.01.2009. u 19:11 - pre 185 meseci
Ok, uvazavam vase misljenje, i od sada cu kretati od 0 :). Bolje je slusati iskusnije nego raditi po svom nahodjenju.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Problem sa funkcijom - unhandled exception...

[ Pregleda: 1995 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.