PDA

Visualizza la versione completa : [c]: algoritmo strano


Trusty
13-04-2005, 13:00
salve a tutti! ho questo problema:
Progettare un algoritmo che, preso in ingresso un array v di n elementi, produce un array w contenente gli elementi distinti di v (elementi che compaiono esattamente una volta). Definire una funzione che implementa l'algoritmo nel caso in cui v contenga una sequenza di 0 e 1.
La funzione restituisce la dimensione del vettore w.
Nel programma principale stampare il contenuto del vettore w.*/
Ho pensato ad una soluzione ma non mi viene! posto il codice:




#include <stdio.h>

int carica(int v[], int n){
int i;
for (i=0; i<n; i++){
do{
printf("Inserire %d elemento:",i+1);
scanf("%d", &v[i]);
}while ((v[i]!=0)&&(v[i]!=1));
}
}

void stampa(int v[], int n){
int i;
for (i=0; i<n; i++)
printf("%2d", v[i]);
}

int distinti01(int v[], int dim, int w[]){
int i,j,inf,med,sup,cont=0;
int a[50];
int b[50];
inf=0;
sup=dim-1;
med=(inf+sup)/2;
for (i=inf; i<=med; i++){
printf("confronto tra elemento %d e elemento %d del 1 vettore\n", i,i+1);
if (v[i]!=v[i++])
a[i]=v[i];
}
for (j=med; j<=sup; j++){
printf("confronto tra elemento %d e elemento %d del 2 vettore\n", j,j+1);
if (v[j]!=v[j++])
b[j]=v[j];
}
for (i=inf; i<=med; i++){
for (j=med; j<=sup; j++){
if (a[i]!=b[j]){
w[i]=a[i];
cont+=1;
}
}
}
printf("Vettore finale: ");
for (i=0; i<dim; i++)
printf("%2d", w[i]);
return cont;
}

int main(){
int n,cont=0;
int v[100];
int w[100];
printf("Inserire dimensione vettore: ");
scanf("%d", &n);
carica(v,n);
printf("Array di partenza: ");
stampa (v,n);
printf("\n");
cont=distinti01(v,n,w);
printf("\n");
if (cont==0)
printf("L'array non ha elementi distinti\n");
else
printf("La dimensione dell'array risultante :\n", cont);
return 0;
}



dove sbaglio? grazie !!!!1

Trusty
13-04-2005, 13:02
io l'ho pensato cos ma potrebbero esserci altre 1000 strade credo (magari anche mooolto pi corte).....ma sapete come ......non tutte le ciambelle escono con il buco! :D


:ciauz:

dekdek
13-04-2005, 13:05
Io risponderei cosi':

La specifica e' ambigua.

Trusty
13-04-2005, 13:08
uhmm avresti un suggerimento per l'algoritmo?? la specifica strana anche perch dopo con lo stesso algoritmo formulato in questo esercizio dovrei inserire numeri arbitrari (e non solo 0 o 1)!!!!

helpino??

dekdek
13-04-2005, 13:18
Ah, quindi per sequenze di 0 ed 1 si intende che v[i] vale o '0' o '1'?
In questo caso e' semplice, non devi neanche produrre w, visto che cmq non lo restituisci, quindi non ti serve.



primoelemento = v[0];
altroelemento = (v[0] = 0) ? 1 : 0;
for (i=1; i<n; i++) {
if (v[i] == altroelemento)
return 2;
}
return 1;


Dovrebbe andare...
Ovviamente questo non funzionera' mai nel caso generale.

Trusty
13-04-2005, 13:27
scusa non ho mai usato il costrutto con il ? e il : !!!!!!!!!!!!!!

comunque w devo produrlo (purtroppo)!!!

e il vettore w deve essere costituito da elementi distinti di questo array!
cio se c uno solo 0 e tutti gli altri elem sono 1 allora w deve essere composto solo dallo 0!

:ciauz:

dekdek
13-04-2005, 13:32
int w[2];
w[0]=v[0];

if (w[0] = 0)
altroelemento = 1;
else
altroelemento = 0;

for (i=1; i<n; i++) {
if (v[i] == altroelemento) {
w[1]=v[i];
return 2;
}
}
return 1;

Loading