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

Molim vas pogledajte funkciju!

[es] :: C/C++ programiranje :: Molim vas pogledajte funkciju!

[ Pregleda: 1975 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Molim vas pogledajte funkciju!06.01.2006. u 20:11 - pre 199 meseci
Code:
void brPov(Pcvor glava) {
    enum {NEMA, IMA};
    Pcvor tek, pret;
    Pcvor novaG, noviTek, noviPret, novi;
    short k;
    
    
    
    /*inicijalizacija nove liste*/
    ini (&novaG);
    
    
    printf("\n\tTablearni prikaz broja pojavljivanja elemenata u listi!\n\n");
    
    if (glava==NULL) {
        printf("\n\t\tLista je prazna. Ne moze da se ispise tabelarni prikaz!\n");
    }
        else {
                tek = glava;
                while (tek!=NULL) {            
                    pret = tek;
                    
                    k = NEMA;
                    noviTek = novaG;
                    while (noviTek!=NULL) {
                        noviPret = noviTek;
                        if (noviPret->broj == pret->broj) k = IMA;
                        noviTek = noviTek->sledeci;
                    }
                    
                    if (k==NEMA) {
                            if (novaG==NULL) {
                                novaG = (Tcvor *)malloc(sizeof(Tcvor));
                                novaG->broj = pret->broj;
                                novaG->sledeci = NULL;
                            }
                                else {
                                    novi  = (Tcvor *)malloc(sizeof(Tcvor));
                                    novi->broj = pret->broj;
                                    novi->sledeci = novaG;
                                    novaG = novi;
                                }
                            printf("%d se pojavljivao %d puta!\n", pret->broj, prebroj(glava, pret->broj));
                        }
                        
                    tek = tek->sledeci;
                
                }
    
    }
    
    osobodiMem(&novaG);

}


Ova funkcija treba da ispise koliko puta se koji broj pojavljivao u dinamickoj listi. Ja sam je pisao, ali nekad radi kako treba, nekad prekine ceo program, a nekad izmeni vrednosti u glavnoj listi!
osobodiMem i prebroj su moje funkcije i rade kako treba.
U stvari uploadovaću ceo program ako može da pomogle, ali sve ostalo radi OK, čini mi se.

Problem se pojavio kada sam počeo da radim sa lokalnom listom u kojoj pamtim za koje brojeve sam već štampao podatke (da se ne ponavlja). Dok je štampao za sve brojeve iz liste (za one koje se ponavljaju i više puta) sve je radilo kako treba. Znači, ovaj kod radi kako treba:
Code:

void brPov(Pcvor glava) {
    Pcvor tek, pret;

    
    
    printf("\n\tTablearni prikaz broja pojavljivanja elemenata u listi!\n\n");
    
    if (glava==NULL) {
        printf("\n\t\tLista je prazna. Ne moze da se ispise tabelarni prikaz!\n");
    }
        else {
                tek = glava;
                while (tek!=NULL) {            
                    pret = tek;
                    printf("%d se pojavljivao %d puta!\n", pret->broj, prebroj(glava, pret->broj));
                    tek = tek->sledeci;
                        }
                        

                
                }

}


ali i sami vidite u čemu je problem. Ako neki ima bolju ideju kako da rešim ovo, umesto da gleda moj kod i to je dobrodošlo pošto je ovo najnormalnija ideja koja je mani pala na pamet!


Ako može neko da pomogne...

Hvala unapred!


[Ovu poruku je menjao del-boy dana 06.01.2006. u 23:05 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

ftn

Član broj: 80589
Poruke: 3
*.174.eunet.yu.



Profil

icon Re: Molim vas pogledajte funkciju!13.01.2006. u 16:02 - pre 199 meseci
Zdravo kolega,
ja stvarno ne znam za ovaj tvoj problem ,
pa jel bi mogao ti da mi pomognes oko ovog probrama
javlja gresku kod return (8)+1
a i neki drugi programi iz zbirke imaju isti problem
pa sta treba tu da se ispravi i jel mozes da mi malo objasnis:sta,kako i zasto
:)
Pozdrav


# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# include <curses.h>

# define max_dim 7

// Definicija novog tipa podataka
typedef int matrica[max_dim][max_dim];

//Prototipovi funkcija
int minimum(matrica,int);
void zbir(matrica,matrica,int);
void mnozenje(matrica,matrica,int,matrica);

main()
{
int n,i,j,amin,bmin;
matrica a,b,c;

//Formiranje matrice 'a'
randomize();
do{
printf("Unesite dimenziju matrice (N<7)\n");
printf("N=");
scanf("%d",&n);
}while(n<1||n>max_dim);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)a[j]=random(8)+1;
}
//Stampanje matrice 'a'
printf("Matrica A je:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++) printf("%d",a[j]);
}
//Formiranje matrice 'b'
randomize();
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)b[j]=random(8)+1;
}
//Stampanje matrice 'b'
gotoxy(40,6);
printf("Matrica B je:\n");
for(i=0;i<n;i++)
{
gotoxy(40,8+i);
for(j=0;j<n;j++)printf("%d",b[j]);
}
//Odredjivanje matrice 'c'
amin=minimum(a,n);
bmin=minimun(b,n);
if(amin>bmin) mnozenje(a,b,n,c);
else {
mnozenje(b,b,n,c);
zbir(c,a,n);
}
//Stampanje matrice 'c'
printf("Matrica C je:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(c[j]<100) printf("%d",c[j]);
else printf("%d",c[j]);
}
}
}
int minimum(matrica x,int m)
/*m- dimenzija kvadratne matrice
x- matrica*/
{
int i,j,min;
min=x[0][0];
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
if(x[j]<min)min=x[j];
}
return min;
}
void zbir(matrica x,matrica y,int m)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)x[j]+=y[j];
}
}
void mnozenje(matrica x,matrica y,int m,matrica z)
{
int i,j,k;
for(i=0;i<m;i++);
for(j=0;j<m;j++)
{
z[j]=0;
for(k=0;k<m;k++) z[j]+=x[j]*y[j];
}
}
 
Odgovor na temu

sasadom
Sasa Domazetovic
Svuda gde sam trenutno
Beograd

Član broj: 79538
Poruke: 13
*.migcomputers.co.yu.

Sajt: www.SasaPress.com


Profil

icon Re: Molim vas pogledajte funkciju!18.01.2006. u 00:22 - pre 199 meseci
za DEL-BOY

To se ne radi tako!!!
TO SE RADI SAMO U JEDNOM PROLAZU:))
KAKO :))

LAKO - Prvo se kreira jedan dvo-dimenzionalni niz gde je prva vrednost moguci broj, a u drugu lokaciju clana nizase upisuje (povecava za 1) broj javljanja broja (karaktera). Tako da ti je potreban samo 1 prolaz kroz tvoj niz, gde u realnom vremenu kako uzmes sledeci clan u tvom nizu, ti ga markiraj (dodaj 1 u dvo-dimenzionom nizu). Dvo-dimenzioni moze da bude i jedno-dimenzioni gde ti imas tacno 256 clanova ako se radi o bajtovima (char, byte).


Da pojasnim jos nesto. Tvoj nacin resavanja problema, u programiranju, se naziva GRUBA SILA. Zasto? Pa, pokusavas da problem resis tako sto ces izvesti sve moguce kombinacije. KATASTROFA - vreme rada (mozda nikada ne zavrsi, nije jasno za slozenije problema, ne mozes da nadjes resenje, ...) :))
ZATO POSTOJI LINIJSKO RESENJE PROBLEMA U KOJEM KORISTIS 'POMAGALA' (OVDE DODATNI NIZ) I RAZNE TEHNIKE PROGRAMIRANJA (E TO JE PROGRAMIRANJE) GDE CES U DOVOLJNO MALOM BROJU PROLAZA RESITI PROBLEM.

Dobar ti nadimak :))

 
Odgovor na temu

[es] :: C/C++ programiranje :: Molim vas pogledajte funkciju!

[ Pregleda: 1975 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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