Correzione esercizio

di il
17 risposte

Correzione esercizio

Salve! spero di non infastidire nessuno con i miei continui post ,ho fatto l'ennesimo esercizio su code:blocks e volevo chiedervi un aiuto nella correzione , ho testato già parte dell'esercizio ma è l'ultimo punto che mi da più grane!


Descriere un algoritmo codificato c/c++ che :
1)dichiara un vettore di nome x contenente 100 numeri interi
2)dichiara un vettore di nome y contentente 100 numeri interi
3)legge da standard input 100 valori e li inserisce nel vettore x
4)legge da standard input un valore e lo inserisce in una variabile z
5)inserisce nei posti pari del vettore y al più 50 valori del vettore x che sono maggiori o uguali al valore contenuto
nella variabile z e inserisce nei posti dispari del vettore y al più 50 valori del vetore x che sono minori di z

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

int main (){
int x[100] , y[100];
int i ,j, z , n;
z=0;
for(i=0 ; i<100 ; i++){
scanf ("%d" ,&x[i]);
printf("x[%d]\n" ,x[i]);
}

printf("inserisci un valore:",n);
scanf ("%d",&n);
z=z+n;
printf ("z:%d" , z);

for (j=0 ; j<100 ; j++){
     if(j%2==0){do{
            scanf("%d", &x[i]);
        if(x[i]>=z) printf("y[%d]", y[x[i]]);
        j++;}while(i<=50);
     }
   }

return 0;
}
grazie in anticipo

17 Risposte

  • Re: Correzione esercizio

    
    printf("inserisci un valore:",n);
    
    quella riga è sbagliata, e il compilatore dovrebbe segnalartelo.
    ma in sostanza tutta l'acquisizione della variabile z è sbagliata:
    4)legge da standard input un valore e lo inserisce in una variabile z
    
    printf("inserisci un valore:");
    scanf ("%d",&z);
    
    5)inserisce nei posti pari del vettore y al più 50 valori del vettore x che sono maggiori o uguali al valore contenuto
    nella variabile z e inserisce nei posti dispari del vettore y al più 50 valori del vetore x che sono minori di z
    srotoliamo il testo:
    .Scorro il vettore x
    ..Se (x >= Z && pari < 100) allora y[pari] = x; pari += 2;
    ..Se (x < Z && dispari < 100) allora y[dispari] = x; dispari += 2;

    prova adesso a riscriverlo.
  • Re: Correzione esercizio

    Ho fatto un errore stupidissimo sul punto 4....


    per il resto adesso lo provo a riscrviere , non capisco cosa sbagli ogni volta nel scrivere gli algoritmi....
  • Re: Correzione esercizio

    vbextreme ha scritto:


    
    printf("inserisci un valore:",n);
    
    quella riga è sbagliata, e il compilatore dovrebbe segnalartelo.
    ma in sostanza tutta l'acquisizione della variabile z è sbagliata:
    4)legge da standard input un valore e lo inserisce in una variabile z
    
    printf("inserisci un valore:");
    scanf ("%d",&z);
    
    5)inserisce nei posti pari del vettore y al più 50 valori del vettore x che sono maggiori o uguali al valore contenuto
    nella variabile z e inserisce nei posti dispari del vettore y al più 50 valori del vetore x che sono minori di z
    srotoliamo il testo:
    .Scorro il vettore x
    ..Se (x >= Z && pari < 100) allora y[pari] = x; pari += 2;
    ..Se (x < Z && dispari < 100) allora y[dispari] = x; dispari += 2;

    prova adesso a riscriverlo.



    con scorro il vettore x intendi che devo usare lo scanf giusto?
  • Re: Correzione esercizio

    No scorrere significa ciclare, USA un ciclo for
  • Re: Correzione esercizio

    #include <stdio.h>
    #include <stdlib.h>
    
    int main (){
    int x[100] , y[100];
    int i , z , pari , dispari;
    pari=0;
    dispari=1;
    
    for(i=0 ; i<100 ; i++){
    scanf ("%d" ,&x[i]);
    printf("x[%d]\n" ,x[i]);
    }
    
    printf("inserisci un valore:");
    scanf ("%d",&z);
    
    for(i=0 ; i<100 ; i++){
    if (x[i]>=z && pari<100){ y[pari] = x[i];
    pari = pari + 2;}
    if (x[i]<z && dispari<100) {y[dispari]=x[i];
    dispari= dispari + 2;}   }
    
    return 0;
    }
    spero che adesso vada bene!non riesco a capire a livello logico cosa sbaglio ogni volta .... suggerimenti???
  • Re: Correzione esercizio

    Manca solo un po' di esperienza.
    Ora sei solo "fissato" sul codice e lasci il problema in secondo piano, col tempo sarai "fissato" sul problema e ti dimenticherai del codice.
  • Re: Correzione esercizio

    L'esercizio ora è giusto? grazie per l'aiuto!
  • Re: Correzione esercizio

    Si che è giusto! Risponde a tutte le domande e funziona.

    Per controllare che il tuo esercizio vada bene devi fare un paio di modifiche
    1. Riduciamo il numero di elementi (100 sono troppi per i test
    2. Visualizziamo Y
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX 10
    
    int main ()
    {
    	int x[MAX] , y[MAX];
    	int i , z , pari , dispari;
    	pari=0;
    	dispari=1;
    
    	for( i = 0; i < MAX ; ++i)
    	{
    		printf("x[%d]=",i);
    		fflush(stdout);
    		scanf ("%d" ,&x[i]);
    	}
    
    	printf("inserisci un valore:");
    	fflush(stdout);
    	scanf ("%d",&z);
    
    	for( i = 0; i < MAX; ++i)
    	{
    		if (x[i]>=z && pari < MAX)
    		{ 
    			y[pari] = x[i];
    			pari = pari + 2;
    		}
    		else if (x[i]<z && dispari < MAX) 
    		{
    			y[dispari] = x[i];
    			dispari = dispari + 2;
    		}   
    	}
    	
    	printf("Z=%d\n",z);
    	for( i = 0; i < MAX; ++i)
    		printf("y[%d]=%d\n",i,y[i]);
    	
    	return 0;
    }
    
  • Re: Correzione esercizio

    Perfetto grazie mille
  • Re: Correzione esercizio

    Ho fatto un esercizio molto simile volevo sapere se è giusto ! grazie!
    Descrivere un algoritmo codificato in C/C++ che :
     1) Dichiara un vettore di nome x contenente 100 numeri interi
     2) Dichiara un vettore di nome y contenente 100 numeri interi
     3) Legge da standard input 100 valori e li inserisce nel vettore x. Si suppone che di questi 100 valori 50 siano positivi e 50 negativi.
      Tuttavia non e’ noto l’ordine con cui vengono  inseriti i valori.
     4) Inserisce nel vettore y i valori del vettore x alternando i positivi e i negativi.*/
    
     #include <stdio.h>
     #include <stdlib.h>
    
     int main () {
         int i , x[100] , y[100] , pos , neg ;
    
         for (i=0 ; i<100 ; i++){
            scanf ("%d" , &x[i]);
            printf ("x[%d]\n" ,x[i]);}
    
            pos=1;
            neg=-1;
            do{
                if(x[i]==pos) {x[i]=y[neg];
                x[i]--;}
                if (x[i]==neg) {x[i]= y[pos];
                x[i]++;}
                }while (i<100);
    
            return 0;
                }
    
  • Re: Correzione esercizio

    Sbagli approccio... qui non devi postare esercizi per farteli controllare, non siamo a scuola e non sei dal tutor...

    Qui posti un codice in cui c'è un errore, ci dici quale errore e se ne parla. Oppure non sai con fare qualcosa in particolare, ti spieghi e avrai qualche dritta...

    Per tutto il resto ... a scuola...
  • Re: Correzione esercizio

    Ok ho capito!
  • Re: Correzione esercizio

     #include <stdio.h>
     #include <stdlib.h>
    
     int main () {
         int i ,p ,n , x[100] , y[100]   ;
    
         for (i=0 ; i<100 ; i++){
            printf("inserisci un valore:");
            scanf ("%d" , &x[i]);
            printf ("x[%d]\n" ,x[i]);}
    
    p=0;
    n=-1;
    
    for (i=0 ; i<100 ; i++){
                if (x[i]<0) {y[p] = x[i];
                p=p+2;}
                 if (x[i]>0){y[n]= x[i];
                 n=n+2;
                }}
    
    for (i=0 ; i<100 ; i++){
        printf ("y[%d] = %d\n", y[i] , i);
    }
    
    return 0;
    }
    

    ho rifatto l'esercizio che non mi convinceva , testando mi viene più o meno gli ultimi numeri non si alternano , positivi/negativi è normale?
  • Re: Correzione esercizio

    Qui

    printf ("y[%d] = %d\n", y , i);

    forse volevi scrivere

    printf ("y[%d] = %d\n", i, y);
Devi accedere o registrarti per scrivere nel forum
17 risposte