[ del-boy @ 06.01.2006. 20:11 ] @
| 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] |
[ ftn @ 13.01.2006. 16:02 ] @
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];
}
}
[ sasadom @ 18.01.2006. 00:22 ] @
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 :))
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.