PROBLEMA Problema esercizio array

Pubblicità

gory10

Nuovo Utente
Messaggi
7
Reazioni
0
Punteggio
24
Ciao a tutti, sono alle prime armi con il C e specialmente con gli array. Ho un problema con questo esercizio di cui vi riporto la traccia con annessi input e output:
Scrivere un programma che legga da tastiera 10 interi, li scriva in un array A, e lo passi ad una funzione verifica condizione. La funzione restituisce l’indice i del primo elemento che verifica la seguente condizione:
A = A[i + 1] − A[i − 1]
oppure -1 nel caso in cui nessun elemento verifichi la suddetta condizione. Il risultato della funzione viene stampato nella main.

Esempio:
Input Output
9 2
5
-2
3
5
50
4
-7
0
-7

L'esercizio l'ho impostato così:
C:
#include <stdio.h>
#define dim 10
int verifica_condizione (int a[], size_t n);
int main () {
    int a[dim];
    printf("Inserisci 10 interi. \n");
    for (size_t i = 0; i < dim; i++) {
        while(scanf("%d", &a[i]) != 1) {
            printf("Input errato. Inserisci un intero.\n");
            scanf("%*[^\n]%*c");
        }   
    }
    printf("%d \n", verifica_condizione(a,dim));
}

int verifica_condizione (int a[], size_t n) {
    int indice = 0;
    int b;
    for (size_t y = 0; y < dim; y++) {
        b = a[y+1] - a[y-1];
        if (a[y] == b) {
            indice = y;
        } else {
            indice = -1;
        }
    }
    return indice;
}
Non capisco dove e in cosa sbaglio. Grazie in anticipo.
 
Ciao a tutti, sono alle prime armi con il C e specialmente con gli array. Ho un problema con questo esercizio di cui vi riporto la traccia con annessi input e output:

L'esercizio l'ho impostato così:
C:
#include <stdio.h>
#define dim 10
int verifica_condizione (int a[], size_t n);
int main () {
    int a[dim];
    printf("Inserisci 10 interi. \n");
    for (size_t i = 0; i < dim; i++) {
        while(scanf("%d", &a[i]) != 1) {
            printf("Input errato. Inserisci un intero.\n");
            scanf("%*[^\n]%*c");
        }   
    }
    printf("%d \n", verifica_condizione(a,dim));
}

int verifica_condizione (int a[], size_t n) {
    int indice = 0;
    int b;
    for (size_t y = 0; y < dim; y++) {
        b = a[y+1] - a[y-1];
        if (a[y] == b) {
            indice = y;
        } else {
            indice = -1;
        }
    }
    return indice;
}
Non capisco dove e in cosa sbaglio. Grazie in anticipo.
Il ciclo deve iniziare da 1 se vuoi accedere alla posizione y-1 e terminare a < dim-1 se vuoi accedere alla posizone y+1. E alla condizione (a[y] == b) vera dovresti terminare il ciclo e ritornare l'indice.
 
Il ciclo deve iniziare da 1 se vuoi accedere alla posizione y-1 e terminare a < dim-1 se vuoi accedere alla posizone y+1. E alla condizione (a[y] == b) vera dovresti terminare il ciclo e ritornare l'indice.
Grazie, ora funziona. Ho riscritto la funzione cosi:
C:
int verifica_condizione (int a[], size_t n) {
    int indice = 0;
    int b;
    for (size_t y = 1; y < dim-1; y++) {
        b = a[y+1] - a[y-1];
        if (a[y] == b) {
            indice = y;
            break;  
        } else {
            indice = -1;
        }
    }
    return indice;
}
Mi spiegheresti gentilmente perché senza "break" non andava?
 
Grazie, ora funziona. Ho riscritto la funzione cosi:
C:
int verifica_condizione (int a[], size_t n) {
    int indice = 0;
    int b;
    for (size_t y = 1; y < dim-1; y++) {
        b = a[y+1] - a[y-1];
        if (a[y] == b) {
            indice = y;
            break; 
        } else {
            indice = -1;
        }
    }
    return indice;
}
Mi spiegheresti gentilmente perché senza "break" non andava?

Perchè non rispetteresti la richiesta dell'esercizio. Lì ti chiede esplicitamente di restituire l'indice della prima uguaglianza; se non metti il break e non interrompi il ciclo ci potrebbero essere altri valori uguali, e quindi non avresti più l'indice del primo elemento ma un altro indice, oppure ancora -1, perchè se non hai altre uguaglianze vai a porre l'indice a -1.
 
Pubblicità
Pubblicità
Indietro
Top