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

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

Messaggioda Foto Utentetecfil » 27 ago 2013, 19:51

Ciao!

Anche secondo me dal testo non si capisce benissimo! Io ho dato per scontato che gli elementi vadano inseriti uno ad uno attraverso lo scanf, però si potrebbe anche inserirli tutti assieme attraverso la fgets. Io ho usato lo scanf perché riesco a proseguire con il codice :mrgreen:

Foto Utentesimo85 ho provato ad eseguire il codice dei post precedenti [12], però sembra che il programma esegua il controllo solo sulla prima coppia uguale, poi per il resto se due numeri sono ripetuti li stampa due volte (vedi post [13]).

Per quanto riguarda invece il codice che hai scritto nell'ultimo post, ho provato ad eseguirlo e funziona, se viene inserito un numero negativo il programma attende fino a quando il numero inserito è positivo.

Grazie 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

1
voti

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

Messaggioda Foto Utentesimo85 » 27 ago 2013, 20:02

tecfil ha scritto:però sembra che il programma esegua il controllo solo sulla prima coppia uguale, poi per il resto se due numeri sono ripetuti li stampa due volte


Perhé non hanno lo stesso valore salvato nello stesso numero di indice. È un comportamento che non avevo previsto.

:!:

Quindi, dopo aver riordinato l'array OUT, devi eliminare i doppioni e shitare gli zeri a fine array..

:D :D

Riassumendo:

  • 1) Azzerare inizialmente tutti gli elementi dell' array da 20 elementi.
  • 2) Assegnare i valori all' array OUT secondo il procedimento richiesto. Se per esempio gli elementi degli array IN da 10 elementi hanno l' indice #5 dello stesso valore, riempi solo UN elemento dell' array OUT da 20 elementi, in questo caso l' elemento #5, passando il controllo a IN[6] e lavorando su OUT[6] ed eventualmente su OUT[7], e cosi via..
  • 3) Ordinare l'array OUT.
  • 4) Eliminare i doppioni ed effettuare lo scorrimento degli zeri a fine array.
  • 5) Stampare l'array.

Direi che ti rimane completare i punti 3 e 4. Il punto # 5 è facile. :D
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

2
voti

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

Messaggioda Foto UtenteElla » 27 ago 2013, 20:29

ciao scusate se mi intrometto :oops: volevo solo dire a tecfil che sto praticamente rileggendo tutti gli esercizi che ha postato, insieme ai suggerimenti/soluzioni degli altri utenti. Una miniera d'oro di consigli per una principiante come come me. Grazie! O_/
Avatar utente
Foto UtenteElla
15 1
 
Messaggi: 2
Iscritto il: 3 gen 2012, 14:23

1
voti

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

Messaggioda Foto Utentetecfil » 27 ago 2013, 21:15

simo85 ha scritto:
tecfil ha scritto:però sembra che il programma esegua il controllo solo sulla prima coppia uguale, poi per il resto se due numeri sono ripetuti li stampa due volte


Perhé non hanno lo stesso valore salvato nello stesso numero di indice. È un comportamento che non avevo previsto.

:!:

Quindi, dopo aver riordinato l'array OUT, devi eliminare i doppioni e shitare gli zeri a fine array..

:D :D

Riassumendo:

  • 1) Azzerare inizialmente tutti gli elementi dell' array da 20 elementi.
  • 2) Assegnare i valori all' array OUT secondo il procedimento richiesto. Se per esempio gli elementi degli array IN da 10 elementi hanno l' indice #5 dello stesso valore, riempi solo UN elemento dell' array OUT da 20 elementi, in questo caso l' elemento #5, passando il controllo a IN[6] e lavorando su OUT[6] ed eventualmente su OUT[7], e cosi via..
  • 3) Ordinare l'array OUT.
  • 4) Eliminare i doppioni ed effettuare lo scorrimento degli zeri a fine array.
  • 5) Stampare l'array.

Direi che ti rimane completare i punti 3 e 4. Il punto # 5 è facile. :D


:mrgreen: :mrgreen: il punto 4 è da questa mattina alle 8 che tento di farlo ma niente da fare :mrgreen:
le ho provate tutte ma non ne vengo a capo ||O

Nel messaggio [7] ho scritto la soluzione dei punti 3 e 4, il punto 2 mi son permesso di non farlo perché anche se allo stesso indice ho un doppione dopo comunque lo elimino applicando il punto 4 :mrgreen:
viewtopic.php?f=16&t=46889#p433151

Se riesci a trovarmi dov'è l'errore del codice nel messaggio 7 ti offro un caffè :mrgreen:

Ella ha scritto:ciao scusate se mi intrometto :oops: volevo solo dire a tecfil che sto praticamente rileggendo tutti gli esercizi che ha postato, insieme ai suggerimenti/soluzioni degli altri utenti. Una miniera d'oro di consigli per una principiante come come me. Grazie! O_/


Tieni controllata questa sezione perché nei prossimi giorni ne troverai altri :mrgreen: :mrgreen:

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

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

Messaggioda Foto Utentesimo85 » 27 ago 2013, 21:36

tecfil ha scritto:Se riesci a trovarmi dov'è l'errore del codice nel messaggio 7 ti offro un caffè


:shock:

Ringrazio volentieri ma non posso accettare, basta caffé. Quasi soffro di insomnia :!: :mrgreen:
Comunque potrò darci una occhiata più a fondo più tardi o in un prossimo momento.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

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

Messaggioda Foto Utentetecfil » 27 ago 2013, 21:40

Ciao!

Ok grazie mille :ok: questo codice arriva fino ad ordinare l'array in ordine crescente e funziona correttamente. Per i doppioni sono piantato sul messaggio [7].

Grazie ancora
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

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

Messaggioda Foto Utentesimo85 » 27 ago 2013, 21:44

Primo erroraccio :!:

Codice: Seleziona tutto
        for (i=0;i<DIM1;i++)
        {
            for (j=0;j<DIM2;j++)
            {
                if (IN1[i]!=IN2[j])
                {
                    OUT[s]=IN1[i];
                    s++;
                }
            }
        }


Se DIM2 = 20 ed IN2 è un array da 10 elementi, dove vai a finire con IN2[j]?
#-o #-o #-o

Riscrivi il codice senza usare nomi come i, j etc..
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

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

Messaggioda Foto Utentetecfil » 27 ago 2013, 21:53

Giusto!! :ok:
Cambiato e messo dimensione DIM1!

Ecco il codice, ho impostato anche il vettore OUT[DIM2]={0}
Codice: Seleziona tutto
#include <stdio.h>
#define DIM1 10
#define DIM2 20
int main ()
{
    int IN1[DIM1], IN2[DIM1], IN3[DIM2], OUT[DIM2]={0}, k=0,zeri=0;
    int i,j, temp,s=0;
   
    printf("Riempi il primo vettore con %d numeri maggiori di zero in ordine crescente:\n", DIM1);
    for (i=0;i<DIM1;i++)
    {
        scanf("%d", &IN1[i]);
        if (IN1[i]<0)
        i--;
       
    }
    printf("Riempi il secondo vettore con %d numeri maggiori di zero in ordine crescente:\n", DIM1);
    for (i=0;i<DIM1;i++)
    {
        scanf("%d", &IN2[i]);
        if (IN2[i]<0)
        i--;
    }


    printf("\nEcco il vettore prima di essere ordinato:\n");
    for (i=0;i<DIM1;i++)
    {
        for (j=0;j<DIM1;j++)
        {
            if (IN1[i]!=IN2[j])
            {
                OUT[s]=IN1[i];
                s++;
            }
        }
    }
   
    for (i=0;i<DIM1;i++)
    {
        OUT[s]=IN2[i];
        s++;
    }
    for (i=0;i<DIM2;i++)
    {
        printf("%4d", OUT[i]);
    }
   
    return 0;
}


Adesso però quando lo eseguo, dopo aver immesso tutti i numeri esce:
Codice: Seleziona tutto
Run Command: line 1:  2879 Segmentation fault: 11  ./"$2" "${@:3}"


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

0
voti

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

Messaggioda Foto Utentesimo85 » 27 ago 2013, 22:15

tecfil ha scritto:Cambiato e messo dimensione DIM1!

Eh ma non basta :!:

Ti avevo chiesto gentilmente di evitare i nomi come i, j, s, etc.. :?
Poi, hai un controllo diretto sulla variabile "s"?

Per ultimo, ti invito ad leggere la man page della funzione memcpy.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

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

Messaggioda Foto Utentetecfil » 27 ago 2013, 22:37

Ho utilizzato quei nomi perché sono richiesti nell'esame, adesso ho cambiato IN1 e IN2 con vett1 e vett2.

La s l'ho inizializzata a zero, e la incremento solo se un numero del primo vettore non è già presente nel secondo vettore. Poi sapendo quanto vale, vado ad aggiungere tutti gli altri elementi del secondo vettore a quello in uscita, così non ho doppioni e mi rimangono gli zeri a fine vettore.

Ho controllato anche la funzione che mi hai suggerito, però in teoria per questo esame dobbiamo basarci il più possibile sui cicli.

Codice: Seleziona tutto
#include <stdio.h>
#define DIM1 10
#define DIM2 20
int main ()
{
    int vett1[DIM1], vett2[DIM1], out[DIM2]={0}, k=0,zeri=0;
    int i,j, temp,s=0;
   
    printf("Riempi il primo vettore con %d numeri maggiori di zero in ordine crescente:\n", DIM1);
    for (i=0;i<DIM1;i++)
    {
        scanf("%d", &vett1[i]);
        if (vett1[i]<0)
        i--;
       
    }
    printf("Riempi il secondo vettore con %d numeri maggiori di zero in ordine crescente:\n", DIM1);
    for (i=0;i<DIM1;i++)
    {
        scanf("%d", &vett2[i]);
        if (vett2[i]<0)
        i--;
    }


    printf("\nEcco il vettore prima di essere ordinato:\n");
    for (i=0;i<DIM1;i++)
    {
        for (j=0;j<DIM1;j++)
        {
            if (vett1[i]!=vett2[j])
            {
                out[s]=vett1[i];
                s++;
            }
        }
    }
   
    for (i=0;i<DIM1;i++)
    {
        out[s]=vett2[i];
        s++;
    }
    for (i=0;i<DIM2;i++)
    {
        printf("%4d", out[i]);
    }
   
    return 0;
}


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

PrecedenteProssimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 21 ospiti