PDA

View Full Version : [C] Codice molto semplice, perchè non va?


-Ivan-
10-01-2006, 18:17
Incredibile più i programmi sono facili e meno possibilità ci sono che partano, grrrrrrr!

Mi sapete dire nel seguente codice cosa ha che non va la funzione conta elementi diversi?
Al di la di quello che dovrebbe fare che l'ho scritto senza ricontrollarlo approfonditamente prima o poi dovrebbe terminare.
Se non la chiamo mi stampa i due vettori normalmente ma se la chiamo non succede niente nella console.


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

void conta_elementi_diversi(int a[], int b[]);
void stampa_vettori(int a[], int b[]);


int main()
{
int a[15]={2,3,1,2,2,1,2,2,3,2,4,5,6,5,6};
int b[30]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

conta_elementi_diversi(a, b);
stampa_vettori(a, b);

}
void conta_elementi_diversi(int a[], int b[])
{
int temp=0;
int i=0,k=0;
int count=1;

b[0]=a[0];
temp=a[0];
for(k=2;k<30;k+2)
{
for(i=1;i<15;i++)
{
if(a[i]==temp)
{
count++;
}
}
b[k-1]=count;
b[k]=a[k-1];
temp=a[k-1];
}
}
void stampa_vettori(int a[], int b[])
{
int i=0;

system("cls");
for(i=0;i<15;i++)
{
printf("%d ", a[i]);
}
printf("\n\n");
getch();
for(i=0;i<30;i++)
{
printf("%d ", b[i]);
}
getch();

}

Fenomeno85
10-01-2006, 19:39
mi metto a guardare il codice

~§~ Sempre E Solo Lei ~§~

Fenomeno85
10-01-2006, 19:46
non capisco cosa vuoi fare nel cerca .. allora in un for non hai messo k =

se devi cercare le ricorrenze dei numeri ti butto giù un codice. non so se riesco stasera.

~§~ Sempre E Solo Lei ~§~

Fenomeno85
10-01-2006, 22:11
// struttura dati
struct ricc{
int val;
int ric;
bool attivo;
};

void conta_elementi_diversi(int a[])
{
ricc result[15];

printf ("\nInizializzazione struttura...");
for(int i=0;i<N;i++)
{
result[i].ric = 1;
result[i].attivo = true;
}
printf ("\nInizializzazione struttura effettuata.");

for (int y=0;y<N-1;y++){
for (int i=y+1;i<N;i++){
if (result[i].attivo == true && a[y] == a[i]){
result[y].ric ++;
result[i].attivo = false;
}
}
}

printf ("\nVisualizzazione dati ...\n");
for (int i=0;i<N;i++){
if (result[i].attivo == true){
printf ("%d -> ricorrenza %d\n", a[i],result[i].ric );
}
}
}


attualmente mi è venuta in mente questa soluzione.

~§~ Sempre E Solo Lei ~§~

Fenomeno85
10-01-2006, 22:28
sempre detto che sto impazzendo ... allora rileggendo mi sa che ho capito male il tutto .. per fare quello che vuoi basta che usi solo un array di bool e fai lo stesso procedimento con una cancellazione logica.

~§~ Sempre E Solo Lei ~§~

Fenomeno85
10-01-2006, 22:42
int conta_dif_ele (int a[]){
int n_ele = 0;
bool logic[N];
for (int i=0;i<N;i++){
logic[i]=true;
}
for (int i=0;i<N-1;i++){
if (logic[i]== true){
n_ele ++;
for (int y=i+1;y<N;y++){
if (logic[y]==true && a[i] == a[y])
logic[y] = false;
}
}
}

return n_ele;
}


questa è la funzione che ti serve.

~§~ Sempre E Solo Lei ~§~

-Ivan-
11-01-2006, 15:27
Io partendo da un vettore di interi ne volevo creare un altro con nelle celle pari i numeri del primo vettore e nelle celle dispari quante volte ricorrono dentro al primo vettore.
Se un numero è ripetuto nel secondo vettore appare una sola volta.
Adesso appena ho un minuto guardo il codice che hai scritto.
Grazie dell'aiuto.

Fenomeno85
11-01-2006, 18:47
va be implementati al posto della visualizzazione il modo per salvare nell'array ;)


~§~ Sempre E Solo Lei ~§~