Esercizio di programmazione in c

di il
4 risposte

Esercizio di programmazione in c

Buongiorno a tutti. Volevo porre un quesito sull'uso dei flag. Premetto che sono alle prime armi con l'uso del linguaggio c. L'esercizio prevede l'inserimento di una sequenza di numeri e la successiva verifica se essa sia palindroma. Il programma scritto da me da come output che la sequenza è sempre palindroma. Penso che il problema sta nel fatto che all'inizio ho inizializzato il flag "palindroma"=0 (intendendo che la sequenza venga considerata non palindroma all'inizio).
Qualcuno potrebbe spiegarmi perché? Grazie

#include <stdio.h>
#include <stdlib.h>
#define N 5

int main ()
{
int v[N], i, j, palindroma=0;
printf ("Inserisci il vettore:\n");
for (i=0; i<N; i++)
{
scanf("%d%*c", &v);
}
for (i=0; i<N; i++)
{

if (v==v[N-1-i])
palindroma=1;

}
if (palindroma)
printf ("\nLa successione e' palindroma!\n");

else
printf ("\nLa successione non e' palindroma!\n");

getc(stdin);
return 0;
}

4 Risposte

  • Re: Esercizio di programmazione in c

    E' proprio sbagliata l'idea di utilizzare un flag in quel modo a mio avviso... Basta che il primo e l'ultimo elemento siano uguali affinché a palindroma venga assegnato il valore 1...
    Perché non fare in questo modo ad esempio?
    
    #include <stdio.h>
    #include <stdlib.h>
    #define N 5
    
    int main ()
    {
    int v[N];
    int i;
    int cont;
    printf ("Inserisci il vettore:\n");
    for (i=0; i<N; i++)
        {
        printf("Inserisci l'elemento %d: ",i+1);
        scanf("%d", &v[i]);
        }
    cont=0;
    for (i=0; i<N; i++)
        {
        if (v[i]==v[N-1-i])
            cont++;
        }
    if (cont==N)
        printf ("\nLa successione e' palindroma!\n");
    else
        printf ("\nLa successione non e' palindroma");
    return 0;
    }
  • Re: Esercizio di programmazione in c

    Ok grazie ...ma se non disturbo potresti spiegarmi perché è sbagliato utilizzare un flag in questo modo?
  • Re: Esercizio di programmazione in c

    Perché ad ogni iterazione del ciclo il valore del flag palindroma cambia... e quindi quando esci dal ciclo basta che il primo e l'ultimo elemento siano uguali affinché il tuo programma consideri la sequenza numerica come palindroma.
    Non so se ho reso l'idea ma se tu ad esempio immagini di avere questo vettore:

    1 3 4 2 1

    Noti che nel tuo ciclo per i=4 avrai:

    v[4]=v[5-1-4]

    v[4]=v[0]

    1=1

    Quindi il flag palindroma diventa 1 e visto che si tratta dell'ultima iterazione rimane ad 1....
    Indifferentemente dalle iterazioni precedenti..
    Ergo il programma considera questa sequenza come palindroma anche se si guarda bene dall'esserlo
  • Re: Esercizio di programmazione in c

    Ok grazie mille, ora è tutto più chiaro
    Buona giornata
Devi accedere o registrarti per scrivere nel forum
4 risposte