Calcolo numeri in un intervallo

di il
15 risposte

Calcolo numeri in un intervallo

Salve sto facendo questo esercizio
Scrivere un programma in linguaggio C che legga, dopo averli dichiarati, da standard input due vettori
di 10 interi A e B e 2 numeri interi a e b.
Il programma deve stampare su standard output il numero di elementi che risultano essere
 strettamente compresi tra a e b nei due vettori
e il numero di elementi di uguale valore nelle medesime posizioni dei vettori A e B.

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i, A[10] , B[10] , a , b,c;
    int count1 , count2;
    count1=0;
    count2=0;

    for (i=0 ; i<10 ; i++){
    printf ("inserisci un valore per il vettore A:");
    scanf("%d" , &A[i]);
        }
        for (i=0 ; i<10 ; i++){
            printf ("inserisci un valore per il vettore B:");
            scanf("%d", &B[i]);
        }

    printf ("inserisci un valore di a:");
    scanf("%d", &a);
    printf ("inserisci un valore di b:");
    scanf ("%d" , &b);

    if(a>b){
       c=a;
       a=b;
       b=c;
        }

    for(i=0 ; i<10 ;i++){
      if (a>A[i] && b<A[i]) count1++;
      if(a>B[i] && b<B[i]) count1++;
      if (A[i]==B[i]) count2++;
      printf ("il numero di numeri compresi tra a e b e':%d\n" , count1);
      printf("il numero di numeri uguali in A[i] e B[i] e' :%d\n" , count2);
    }


    return 0;
}
testando l'eserczio l'ultima parte mi viene solo in parte! nel senso che ho impostato a e b nel caso sia a maggiore di b che inverte i valori in modo tale che il programma non si blocchi (spero sia giusto) e ho aggiunto una variabile c per fare cio'. ho impostato inoltre che nell' intervalo A e B

A a --------------- b A
B a---------------- b B

o almeno la mia intenzione è rendere così gli intervalli ,a e b nei due vettori (ho fatto questa specie di rappresentazione per chiarirmi meglio) , e poi ho fatto due count diversi uno per i valori tra a e b e uno per i valori dei dettori che sono uguali , solo che il risultato del primo count mi viene 0....cosa sbaglio nell'esercizio? grazie!

15 Risposte

  • Re: Calcolo numeri in un intervallo

    Va bene tutto, eccetto per la parte sullo scambio dei valori di a e b. Mi spiego meglio: l'idea è corretta, il problema è che hai fatto confusione su cosa deve essere minore/maggiore di cosa.
    Hai impostato l'if così:
    if(a>b){
        c=a;
        a=b;
        b=c;
    }
    Al termine del quale sarà a < b.
    Nel ciclo for hai:
    if (a>A[i] && b<A[i]) count1++;
    da cui si ricava b < A < a, cioè a > b che è in contraddizione con quello che hai scritto prima.
    Soluzione: inverti i valori di a e b, ad esempio imponi nell'if la condizione a > b.
  • Re: Calcolo numeri in un intervallo

    tuixte ha scritto:


    Va bene tutto, eccetto per la parte sullo scambio dei valori di a e b. Mi spiego meglio: l'idea è corretta, il problema è che hai fatto confusione su cosa deve essere minore/maggiore di cosa.
    Hai impostato l'if così:
    if(a>b){
        c=a;
        a=b;
        b=c;
    }
    Al termine del quale sarà a < b.
    Nel ciclo for hai:
    if (a>A[i] && b<A[i]) count1++;
    da cui si ricava b < A < a, cioè a > b che è in contraddizione con quello che hai scritto prima.
    Soluzione: inverti i valori di a e b, ad esempio imponi nell'if la condizione a > b.


    ok grazie!
  • Re: Calcolo numeri in un intervallo

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        int i, A[10] , B[10] , a , b,c;
        int count1 , count2;
        count1=0;
        count2=0;
    
        for (i=0 ; i<10 ; i++){
        printf ("inserisci un valore per il vettore A:");
        scanf("%d" , &A[i]);
            }
            for (i=0 ; i<10 ; i++){
                printf ("inserisci un valore per il vettore B:");
                scanf("%d", &B[i]);
            }
    
        printf ("inserisci un valore di a:");
        scanf("%d", &a);
        printf ("inserisci un valore di b:");
        scanf ("%d" , &b);
    
    
        if(a>b){
           c=a;
           a=b;
           b=c;
            }
    
        for(i=0 ; i<10 ;i++){
          if (a<A[i] && b>A[i]) count1++;
          if(a<B[i] && b>B[i]) count1++;
          if (A[i]==B[i]) count2++;
          printf ("il numero di numeri compresi tra a e b e':%d\n" , count1);
          printf("il numero di numeri uguali in A[i] e B[i] e' :%d\n" , count2);
        }
    
    
        return 0;
    }
    
    ho fatto la modifica , ma mi il primo printf mi stampa sempre il valore 0!
  • Re: Calcolo numeri in un intervallo

    A parte il fatto che le due stampe vanno fuori dal for.. ho provato quel codice e funziona.
  • Re: Calcolo numeri in un intervallo

    tuixte ha scritto:


    A parte il fatto che le due stampe vanno fuori dal for.. ho provato quel codice e funziona.

    avevo questo dubbio! solo che non ero sicuro! il mio unico dubbio è perchè mi viene sempre 0 , nella stampa dei numeri compresi tra a e b
  • Re: Calcolo numeri in un intervallo

    Sicuro di dare in input i valori corretti? Io l'ho provato e funziona
  • Re: Calcolo numeri in un intervallo

    tuixte ha scritto:


    Sicuro di dare in input i valori corretti? Io l'ho provato e funziona
    si ero io a mttere gli input errati!grazie mille


    purtroppo altro esercizio altro problema anche se devo dire di essere un po' migliorato ho fatto qualche programma che mi è venuto perfettamente!
    
    Scrivere un programma in linguaggio C che legge da standard input un vettore X di 10 interi
     e memorizzi in y il seguente valore:
    
    y= m/M sommatoria da 0 a 9 di (a - m/M)^2
    
    dove m e M sono il più piccolo e il più grande degli elementi inseriti nel vettore X.
     a rappresenta invece l''i-esimo elemento del vettore
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main (){
    
        int i , x[10] , m ,M , c, somm;
        double y, fraz;
        somm=0;
    
        for (i=0 ; i<10 ; i++){
            printf("inserisci un valore:");
            scanf ("%d" , &x[i]);
            }
    
            for (i=0 ; i<10; i++){
                if(x[i]<=m) m=x[i];
                else if (x[i]>m)c=x[i];
    
                if (x[i]>=M) M=x[i];
                else if (x[i]<M) c=x[i];
    
    }
    printf ("M e':%d\n" , M);
    printf ("m e':%d\n" , m);
    
    fraz=m/M * 1.0 ;
    printf ("%lf" , fraz);
    
    
    for (i=0 ; i<10 ; i++){
        somm =(x[i] - fraz) * (x[i] - fraz);
        somm++;
        }
     y=fraz * somm *1.0;
     scanf ("%lf" , &y);
     printf("il risultato è: %lf" , y);
    
    return 0;
    
    
    }
    il printf "fraz" mi continua a dare come risultato 0.00000 e l'ultima parte del programmanon sembra funzionare , cosa sbaglio? grazie
  • Re: Calcolo numeri in un intervallo

    Ho provato a fare delle modifiche
    #include <stdio.h>
    #include <stdlib.h>
    
    int main (){
    
        int i , x[10] , m ,M , c, somm;
        double y, fraz;
        somm=1;
    
        for (i=0 ; i<10 ; i++){
            printf("inserisci un valore:");
            scanf ("%d" , &x[i]);
            }
    
            for (i=0 ; i<10; i++){
                if(x[i]<=m) m=x[i];
                else if (x[i]>m)c=x[i];
    
                if (x[i]>=M) M=x[i];
                else if (x[i]<M) c=x[i];
    
    }
    printf ("M e':%d\n" , M);
    printf ("m e':%d\n" , m);
    
    fraz=m/(M * 1.0) ;
    printf ("%lf" , fraz);
    
    
    for (i=0 ; i<10 ; i++){
        somm =(x[i] - fraz) * (x[i] - fraz);
        somm++;
    }
     y=fraz * somm *1.0;
     printf("il risultato e': %lf" , y);
    
    return 0;
    non capisco perchè mettendo la parentesi alla M con 1.0 . improvvisamente il risulato funziona , ho anche pensato di trogliere lo scanf tanto l'importante è che stampi il valore di y al di là che venga scritto nella cella &y.
  • Re: Calcolo numeri in un intervallo

    Posta il log del compilatore
  • Re: Calcolo numeri in un intervallo

    Scusa l'ignoranza come si fa?grazie per l'aiuto
  • Re: Calcolo numeri in un intervallo

    Che IDE usi?
    quando compili dovrebbe esserci una finestra con su scritto "build log" copia e incolla utilizzando gli appositi tag code
  • Re: Calcolo numeri in un intervallo

    Uso code::blocks , ho fatto build e poi sotto in build log è comparso questo
    mingw32-gcc.exe   -c "C:\Users\Fastweb\Documents\Desktop\esercizio h.c" -o "C:\Users\Fastweb\Documents\Desktop\esercizio h.o"
    mingw32-g++.exe  -o "C:\Users\Fastweb\Documents\Desktop\esercizio h.exe" "C:\Users\Fastweb\Documents\Desktop\esercizio h.o"   
    Process terminated with status 0 (0 minute(s), 1 second(s))
    0 error(s), 0 warning(s) (0 minute(s), 1 second(s))
     
  • Re: Calcolo numeri in un intervallo

    È stranamente settato male, fai nei flag del compilatore ed aggiungi "-Wall"
    dovrebbe essere in build option->compiler setting->other o qualcosa di simile, ma forse non hai selezionato la versione "debug" ma "release", quindi ora cerca un menu a tendina che aprendosi ti da quelle due opzioni e selezioni debug.

    Dovrebbe esserci anche un menu che seleziona i vari flags sia per release che per debug, quindi assicurati di aver selezionato menu e di aver attivato il flag -Wall.
    Dopodiché torna a postare il build log
  • Re: Calcolo numeri in un intervallo

    Somo andato in settings----> compiler ----> e ho messo la spunta a "enable alla common compiler warnings (overrides many other settings) [-Wall]

    ho rifatto build però mi compare sempre questo in "build log"
    mingw32-gcc.exe -Wall  -c "C:\Users\Fastweb\Documents\Desktop\esercizio h.c" -o "C:\Users\Fastweb\Documents\Desktop\esercizio h.o"
    mingw32-g++.exe  -o "C:\Users\Fastweb\Documents\Desktop\esercizio h.exe" "C:\Users\Fastweb\Documents\Desktop\esercizio h.o"   
    Process terminated with status 0 (0 minute(s), 0 second(s))
    0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
Devi accedere o registrarti per scrivere nel forum
15 risposte