Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [c]: algoritmo strano

  1. #1
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642

    [c]: algoritmo strano

    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:

    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
    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  2. #2
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    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!


    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  3. #3
    Io risponderei cosi':

    La specifica e' ambigua.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  4. #4
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    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??
    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  5. #5
    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.

    codice:
    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.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  6. #6
    Utente di HTML.it L'avatar di Trusty
    Registrato dal
    Dec 2004
    Messaggi
    642
    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!

    http://www.oilproject.org/ -->La Scuola On-LIne degli smanettoni!

  7. #7
    codice:
    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;
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.