Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[C] Conferme esercizio su vettori

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[11] Re: [C] Conferme esercizio su vettori

Messaggioda Foto Utentetecfil » 27 ago 2013, 17:02

Ciao!

Ho dovuto modificare
Codice: Seleziona tutto
      if(IN2[indexIn] < 0)

e
Codice: Seleziona tutto
      if(IN2[indexIn] < 0)


Cambiando il < con > altrimenti mi chiedeva di inserire numeri all'infinito. Per una volta completati i due array mi stampa:
Codice: Seleziona tutto
OUT[00] = 02

all'infinito!

Grazie :-)
Ciaoo!
Il colmo per un elettricista? Essere isolato :D
Avatar utente
Foto Utentetecfil
327 1 5 6
Stabilizzato
Stabilizzato
 
Messaggi: 440
Iscritto il: 2 lug 2013, 21:41

1
voti

[12] Re: [C] Conferme esercizio su vettori

Messaggioda Foto Utentesimo85 » 27 ago 2013, 17:08

Dovrebbe funzionare meglio adesso. :mrgreen:

Codice: Seleziona tutto
    #include <stdio.h>
    #include <stdlib.h>
       
    #define DIM1 10
    #define DIM2 20
       
    int main (void)
    {
       int IN1[DIM1] = {0}, IN2[DIM1] = {0}, OUT[DIM2] = {0};
       int indexIn = 0, indexOut = 0;
           
       printf("Fill the 1st array:\n");
       while(indexIn < DIM1)
       {
          scanf("%d", &IN1[indexIn]);

          if(IN1[indexIn] > 0)
                indexIn++;
       }
           
       indexIn = 0;
           
       printf("Fill the 2nd array:\n");
       while(indexIn < DIM1)
       {
          scanf("%d", &IN2[indexIn]);
               
          if(IN2[indexIn] > 0)
             indexIn++;
       }
           
       indexIn = indexOut = 0;
           
       while(indexIn < DIM1)
       {
          if(IN1[indexIn] < IN2[indexIn])
          {
             OUT[indexOut] = IN1[indexIn];
             OUT[indexOut + 1] = IN2[indexIn];
                   
             indexOut += 2;
          }
          else if(IN1[indexIn] > IN2[indexIn])
          {
             OUT[indexOut] = IN2[indexIn];
             OUT[indexOut + 1] = IN1[indexIn];
                   
             indexOut += 2;
          }
          else if(IN1[indexIn] == IN2[indexIn])
          {
             OUT[indexOut] = IN1[indexIn];
                       
             indexOut += 1;
          }
               
          indexIn++;
       }
           
       indexOut = 0;
           
       while(indexOut < DIM2)
       {
          printf("OUT[%.2d] = %.2d\n", indexOut, OUT[indexOut]);           
         
          indexOut++;
       }
       exit(0);
    }
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[13] Re: [C] Conferme esercizio su vettori

Messaggioda Foto Utentetecfil » 27 ago 2013, 17:17

Ciao!

Funziona in parte :mrgreen: Se provo con:
IN1: 2 5 9 14 15 20 25 27 30 32
IN2: 3 5 10 11 12 22 23 25 26 27

Ricevo come output:
Codice: Seleziona tutto
   2   3   5   9  10  11  14  12  15  20  22  23  25  25  27  26  30  27  32   0


Il 5 è stato inserito una volta sola, ma il 27 e il 25 sono stati inseriti lo stesso due volte.

Grazie mille
Ciaoo :-)
Il colmo per un elettricista? Essere isolato :D
Avatar utente
Foto Utentetecfil
327 1 5 6
Stabilizzato
Stabilizzato
 
Messaggi: 440
Iscritto il: 2 lug 2013, 21:41

3
voti

[14] Re: [C] Conferme esercizio su vettori

Messaggioda Foto UtenteDirtyDeeds » 27 ago 2013, 17:17

Ci sono ancora delle cose che non vanno. Sono cose anche qui forse un po' sottili per un principiante, ma preferisco sottolinearle.

1) Defines: avendo due vettori di ingresso, con la stessa dimensione, e un vettore di uscita con dimensione doppia, ho due osservazioni:

a) I nomi DIM1 e DIM2 non mi sembrano significativi, perché potrebbero essere associati ai vettori IN1 e IN2 e non a quelli IN1,2 e OUT.
b) Poiché la seconda dimensione è sempre il doppio della prima conviene definirla già così.

Morale, scriverei qualcosa così:

Codice: Seleziona tutto
#define INBUF_SZ 10
#define OUTBUF_SZ (2*(INBUF_SZ))


(Notare le parentesi nella seconda definizione)

2) Input: il codice

Codice: Seleziona tutto
for (i=0;i<DIM1;i++)
{
        scanf("%d", &IN1[i]);
        if (IN1[i]<0)
        i--;
}


non va bene (anche quello scritto da Foto Utentesimo85 non va bene). Il motivo è che l'input da tastiera è bufferizzato e se uno vuole fare un controllo degli errori deve farlo bene, altrimenti è meglio non farlo per nulla. Supponiamo, infatti, che in risposta al prompt l'utente digiti (supponiamo che gli scappi un '-' al secondo numero):

Codice: Seleziona tutto
4 -5 6 8


e poi prema il tasto Invio. Cosa fa il programma? Memorizza 4, salta -5, e memorizza 6 e 8. L'utente non avrà più la possibilità di inserire 5 nell'ordine richiesto inizialmente, come probabilmente voleva Foto Utentetecfil.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

2
voti

[15] Re: [C] Conferme esercizio su vettori

Messaggioda Foto Utentesimo85 » 27 ago 2013, 17:36

Foto UtenteDirtyDeeds ha il debugger (e non solo) nel nervo ottico. :mrgreen:
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[16] Re: [C] Conferme esercizio su vettori

Messaggioda Foto Utentetecfil » 27 ago 2013, 17:44

Ciao Foto UtenteDirtyDeeds

Grazie mille per le precisazioni! Ma allora tu come faresti a fare il controllo che i numeri siano positivi e non negativi?

Grazie mille
Ciaoo!
Il colmo per un elettricista? Essere isolato :D
Avatar utente
Foto Utentetecfil
327 1 5 6
Stabilizzato
Stabilizzato
 
Messaggi: 440
Iscritto il: 2 lug 2013, 21:41

0
voti

[17] Re: [C] Conferme esercizio su vettori

Messaggioda Foto UtenteDirtyDeeds » 27 ago 2013, 17:49

Adesso devo uscire, nei prossimi giorni ti scrivo un codice d'esempio che faccia correttamente il controllo degli errori. Però vale l'avviso che ti era già stato dato: la cosa andrà decisamente oltre ciò che ti viene richiesto per l'esame.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[18] Re: [C] Conferme esercizio su vettori

Messaggioda Foto Utentetecfil » 27 ago 2013, 18:00

Ciao!

Ho capito grazie mille, più che altro nel testo dell'esercizio c'è scritto:
Si sviluppi un programma in linguaggio C che riceva in ingresso due vettori, IN1 e IN2, di
10 elementi interi maggiori di zero.


Vuole quindi che gli elementi siano maggiori di zero, quindi credo che bisogna fare la verifica. perché ad esempio dopo dice:
Si supponga che i vettori siano inseriti dall’utente in ordine crescente e che non contengano elementi ripetuti (i due vettori possono pero’ avere elementi in comune).
In questo caso è già supposto che siano corretti!

Adesso devo vedere come completare l'esercizio con la stampa corretta degli zeri!

Grazie mille per l'aiuto :-)
Ciaoo!
Il colmo per un elettricista? Essere isolato :D
Avatar utente
Foto Utentetecfil
327 1 5 6
Stabilizzato
Stabilizzato
 
Messaggi: 440
Iscritto il: 2 lug 2013, 21:41

0
voti

[19] Re: [C] Conferme esercizio su vettori

Messaggioda Foto UtenteDirtyDeeds » 27 ago 2013, 18:04

Il testo dell'esercizio secondo me è scritto in modo poco chiaro, ma direi che puoi tranquillamente assumere che i numeri siano positivi.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

1
voti

[20] Re: [C] Conferme esercizio su vettori

Messaggioda Foto Utentesimo85 » 27 ago 2013, 18:24

DirtyDeeds ha scritto:non va bene (anche quello scritto da simo85 non va bene).
...
Supponiamo, infatti, che (..)


Ciao Foto UtenteDirtyDeeds, però il programma, secondo quanto riportato e scritto da Foto Utentetecfil, richiede che i valori di ciascun elemento siano assegnati uno alla volta.

Ho trovato un compilatore online :D (questo) (che non so quanto sia affidabile perché nell'output della printf non codifica il ritorno a capo con la sequenza "\n" e nemmeno quello di tabulazione "\t" almeno per quanto ho testato sul computer da cui scrivo :roll: ), così spinto dalla curiosità di accertarmi, ho scritto un piccolo esempio per i due array ed ho compilato il codice per essere eseguito su un sistema operativo Windows.

Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
           
#define INDIM 10
 
int main (void)
{
   int IN1[INDIM] = {0}, IN2[INDIM] = {0};

   int indexIn = 0;
               
   printf("Fill the 1st array:\n");
   while(indexIn < INDIM)
   {
      scanf("%d", &IN1[indexIn]);

      if(IN1[indexIn] > 0)
         indexIn++;
   }
               
   indexIn = 0;
               
   printf("Fill the 2nd array:\n");
   while(indexIn < INDIM)
   {
      scanf("%d", &IN2[indexIn]);
                   
      if(IN2[indexIn] > 0)
         indexIn++;
   }
               
   indexIn = 0;
               
   while(indexIn < INDIM)
   {
      printf("IN1[%.2d] = %.2d\tIN2[%.2d] = %.2d\n", indexIn, IN1[indexIn], indexIn, IN2[indexIn]);

      indexIn++;
   }

#ifdef WIN32
   system("pause");
#endif

   exit(0);
}


OK che sarebbe meglio mettere un messaggio di avviso in caso di numero negativo, però sembra che il controllo in caso di input con numero negativo, per esempio -5, venga effettuato con successo, almeno in questo caso. Ossia non viene considerato come valido e l'indice all'interno del ciclo non viene incrementato.

Forse tu ti riferivi ad un caso diverso da questo, ossia con tutti i numeri inseriti assieme in una volta sola, giusto?

EDIT: attenzione Foto Utentetecfil che nel codice da me riportato nei post precedenti non c'è il controllo degli zeri in input.

O_/
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

PrecedenteProssimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Google [Bot] e 42 ospiti