Programma in C vettori

di il
41 risposte

Programma in C vettori

Ho fatto un programma di cui il problema diceva: "scrivi un programma che,dato un numero intero K, ruoti un vettore di K, posizioni a destra e sinistra, a seconda della scelta inserita dall'utente, visualizzando il vettore finale e iniziale sullo schermo."

il compilatore mi da errori sulla funzione, su 'break', alcune parentesi, sul 'defaul' e mi sembra su un for.

il programma in C++ va, non c'è nessun errore, ma in C mi da molti errori, potreste aiutarmi a correggerli?
grazie in anticipo

#include <stdio.h>
#include <stdlib.h>
void shift (int*Vet, int n);
void lettura (int*Vet, int a);
// PROGRAMMA PRINCIPALE
int main ()
{
    int n;
    printf ("inserire numero elemeti:\n");
    scanf ("%d", n);
    int V[n];
    lettura (V,n);
    printf ("prima dello shift:\n");
    for(int i=0;i<n;i++){
            scanf("%d", &V[i]); }
            for (int i=0;i<n;i++){
                printf ("%d",V[i]);
                system ("PAUSE");
                return 0;
                }
// FUNZIONE 1
void shift (int *Vet, int n){
     printf ("di quanti posti vuoi traslare gli elementi?\n");
     int k;
     scanf("%d",&k);
     printf("ruotare a destra(D) i sinistra(S)?\n");
     char scelta;
     scanf("%d",&scelta);
     switch(scelta){  //SCELTA IN BASE AL VALORE DELLA VARIABILE CHAR "scelta"
     case ('S'):{  //ROTAZIONE SINISTRA
     for(int j=0;j<k;j++){
             int temp=Vet[0];
             for(int i=0;i<n-1;i++){
                     Vet[i]=Vet[i+1];
                     Vet[n-1]=temp;
                     }
                     }
             break;
             }
     case ('D'):{  //ROTAZIONE VERSO DESTRA
     for(int j=0;j<k;j++){
             int temp=Vet[n-1];
             for(i=n-1;i>0;i--);{
             Vet[i]=Vet[j];
             Vet[0]=temp; }
             }
     break;
     }
     default: {  // nel caso in cui venga inserito un valore diverso da D o S
     printf ("Scelta non valida\n");
     break;
     }
     }
}
     printf ("Dopo lo shift\n"); }
// FUNZIONE 2
void lettura(int*Vet;int a){
     for(int i=0;i<a;i++){
             Vet[i]=i;
             }
}

41 Risposte

  • Re: Programma in C vettori

    Il C (o almeno il mio MinGW) non accetta la dichiarazione delle variabili prima dell'uso. In pratica, ho:

    1) dichiarato "i" assieme alle altre variabili;
    2) eliminato il refuso su "void lettura(int*Vet;int a)", ci vuole la virgola invece del ";" ovvero: "void lettura(int*Vet, int a)"

    e a me compila.

    Questo è il sorgente che a me compila:
    
    #include <stdio.h>
    #include <stdlib.h>
    void shift (int*, int n);
    void lettura (int*, int a);
    // PROGRAMMA PRINCIPALE
    int main ()
    {
        int n;
        int i ;
    
        printf ("inserire numero elemeti:\n");
        scanf ("%d", n);
        int V[n];
        lettura (V,n);
        printf ("prima dello shift:\n");
        for(i=0;i<n;i++){
                scanf("%d", &V[i]); }
                for ( i=0;i<n;i++){
                    printf ("%d",V[i]);
                    system ("PAUSE");
                    return 0;
                    }
    // FUNZIONE 1
    void shift (int *Vet, int n){
         printf ("di quanti posti vuoi traslare gli elementi?\n");
         int k, i, j;
         scanf("%d",&k);
         printf("ruotare a destra(D) i sinistra(S)?\n");
         char scelta;
         scanf("%d",&scelta);
         switch(scelta){  //SCELTA IN BASE AL VALORE DELLA VARIABILE CHAR "scelta"
         case ('S'):{  //ROTAZIONE SINISTRA
         for(j=0;j<k;j++){
                 int temp=Vet[0];
                 for( i=0;i<n-1;i++){
                         Vet[i]=Vet[i+1];
                         Vet[n-1]=temp;
                         }
                         }
                 break;
                 }
         case ('D'):{  //ROTAZIONE VERSO DESTRA
         for(j=0;j<k;j++){
                 int temp=Vet[n-1];
                 for(i=n-1;i>0;i--);{
                 Vet[i]=Vet[j];
                 Vet[0]=temp; }
                 }
         break;
         }
         default: {  // nel caso in cui venga inserito un valore diverso da D o S
         printf ("Scelta non valida\n");
         break;
         }
         }
    }
         printf ("Dopo lo shift\n"); }
    // FUNZIONE 2
    
    void lettura(int*Vet, int a){
    int i ;
         for( i=0;i<a;i++){
                 Vet[i]=i;
                 }
    }
    
  • Re: Programma in C vettori

    Grazie mille, appena posso lo compilo ache io e ti faccio sapere.
    Grazie mille davvero.
  • Re: Programma in C vettori

    La prima scanf è sbagliata
  • Re: Programma in C vettori

    oregon ha scritto:


    La prima scanf è sbagliata
    perchè?
  • Re: Programma in C vettori

    ceciceci ha scritto:


    oregon ha scritto:


    La prima scanf è sbagliata
    perchè?
    ...perché al suo secondo argomento va passato l'indirizzo di memoria della variabile (in questo caso) di tipo int.


    Inoltre il compilatore mi solleva anche quest'altro errore:
    warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’ [-Wformat=]
    scanf("%d", &scelta);
    ^
  • Re: Programma in C vettori

    ceciceci ha scritto:


    oregon ha scritto:


    La prima scanf è sbagliata
    perchè?
    Speravo che lo capissi da sola ... È una sola istruzione semplicissima, dovresti ragionarci invece di chiedere...
  • Re: Programma in C vettori

    vuott ha scritto:


    ceciceci ha scritto:


    oregon ha scritto:


    La prima scanf è sbagliata
    perchè?
    ...perché al suo secondo argomento va passato l'indirizzo di memoria della variabile (in questo caso) di tipo int.


    Inoltre il compilatore mi solleva anche quest'altro errore:
    warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’ [-Wformat=]
    scanf("%d", &scelta);
    ^

    come posso correggerlo?
  • Re: Programma in C vettori

    ceciceci ha scritto:


    come posso correggerlo?
    Sapendo cosa stai facendo Non è una critica malevola voglio davvero dire che se sai cosa succede è automatico fare le cose giuste a meno di sviste. Il C (e non solo) passa i parametri per valore; ovvero, se tu passi una variabile a una funzione, la variabile verrà copiata in una locazione di memoria che la funzione può vedere e manipolare, ma questo accade per la copia vista dalla funzione. Il valore passato dal chiamante non viene toccato. Funzioni come scanf e famiglia *devono* poter modificare il valore passato. E questo si può ottenere passando l'indirizzo, il quale a sua volta si ottiene mettendo una "&" davanti alla variabile. Scanf riceve così il suo indirizzo e può modificare l'area di memoria che gli corrisponde, scrivendoci il valore letto.

    Per questo dicevo che è importante sapere cosa si sta facendo e nel tuo caso andare a vedere il meccanismo di passaggio dei parametri del linguaggio. Se no bastava dire di mettere una "&" davanti alla variabile ma non credo ti avrebbe aiutato per il futuro
  • Re: Programma in C vettori

    Cecilia ... a parte il fatto che ti è stato pure detto, non puoi usare il forum in questo modo. La PAPPA PRONTA non è consentita. E non impari nulla.

    Perché non dai neanche l'impressione di voler studiare un po'?
  • Re: Programma in C vettori

    oregon ha scritto:


    Perché non dai neanche l'impressione di voler studiare un po'?
    Forse perché è il classico esame obbligatorio apparentemente scollegato da un percorso di studi di tutt'altro genere? Non so, di solito in casi di questo tipo è così o una sua variante.
  • Re: Programma in C vettori

    Mah ... Comunque non è un buon motivo per non studiare.
  • Re: Programma in C vettori

    Io l'ho capito molto tardi nella vita; ti dico solo che statistica nel mio corso di laurea in ingegneria era facoltativo e io odiavo la materia che adesso capisco essere fondamentale. Per fortuna non esercito altrimenti è un gap di conoscenza che non avrei mai recuperato appieno. Per questo mi metto nei panni di chi detesta qualcosa che è costretto a studiare.
  • Re: Programma in C vettori

    Comprendo ma non sono d'accordo... Bisogna sforzarsi...
  • Re: Programma in C vettori

    Ragazzi ho corretto il programma, ma mi da un errore in "case ('D') : {"
    in "break"

    alcuni gli ho corretti sa sola, gli altri non riesco a correggerli, potete aiutarmi?
Devi accedere o registrarti per scrivere nel forum
41 risposte