Vettori c

di il
6 risposte

Vettori c

Giorno sono nuovo sul forum e sto cercando di svolgere alcuni esercizi del mio prof di informaticca se potreste aiutarmi su come procedere
questo e un suo esercizio :
Scrivere un programma C che acquisisce un array a1 di 10 interi. Il programma crea e visualizza un nuovo array a2 contenente i soli numeri pari presenti in a1 più di una volta, senza salvare le ripetizioni. Si noti che l’ordine con cui i valori sono salvati in a2 è irrilevante. Per esempio se l’utente inserisce l’array:
1 2 4 2 8 6 6 8 8 1
il programma creerà e visualizzerà l’array:

2 6 8

sono arrivato a questo punto pero non so come fare: tipo se mi da due volte lo stesso numero come facco a farlo scrivere solo una volta nell'altro harray

#include<stdio.h>
#define N 10
int main(){
int a[N],b[],n,i;
for(i=0;i<N;i++){
scanf("%d ", &a);
}

for(i=0;i<N;i++){
if(a%2==0){//*so ce e da qui che devo procedere per l'altro array ma non so come andare avanti se potreste darmi qualche sugerimento ve ne sarei grato*//

}
}

6 Risposte

  • Re: Vettori c

    Nessuna idea? E' un po' pochino quel codice ... anzi quasi nullo ...
  • Re: Vettori c

    Io partirei da qualcosa di più semplice: copia i valori di a1[] in a2[].
    Alcuni appunti vari: i due array chiamali a1 e a2, come richiesto dall'esercizio; se a1[] ha una dimensione di N anche a2[] deve avere tale dimensione; in fondo aggiungi un ciclo per stampare a2 (e magari anche a1)
  • Re: Vettori c

    Il problema non è tanto quello che hai indicato tu (per non salvare le ripetizioni basterebbe cercare se un numero è già presente in a2 prima di inserirlo), quanto il fatto che devi salvare solo i numeri pari che sono presenti più di 1 volta in a1.

    Una soluzione che mi viene in mente su così su due piedi è di iniziare mettendo tutti i numeri pari in un vettore di appoggio v (anche le ripetizioni), ordinandoli mentre li inserisci. A questo punto esegui due cicli annidati su v: in quello esterno iteri su tutti gli elementi in cui sono contenuti dei numeri, mentre quello interno, conoscendo il numero presente nella cella in cui si trova attualmente il ciclo esterno, va avanti contando il numero di ripetizioni; a questo punto il ciclo esterno legge il numero di ripetizioni e, se maggiore di 1 (contando anche il primo elemento), copia il numero attuale in a2 e si sposta in avanti di un numero di elementi pari al numero di ripetizioni.
  • Re: Vettori c

    oregon ha scritto:


    Nessuna idea? E' un po' pochino quel codice ... anzi quasi nullo ...

    ho iniziato da poco gli array e non so come fare una mettere una sola volta sull' altro array,
    so gia che sono numeri pari ma poi li stampo e poi pero non so come fare per stamparli una sola volta quelli che si ripetono

    se dopo l if metto if(a%2==0){

    printf("%d", a);
    mi stamperebbe solo inumeri pari pero più volte io voglio che mi stampi una sola volta e non so come fare
  • Re: Vettori c

    dvaosta ha scritto:


    Il problema non è tanto quello che hai indicato tu (per non salvare le ripetizioni basterebbe cercare se un numero è già presente in a2 prima di inserirlo), quanto il fatto che devi salvare solo i numeri pari che sono presenti più di 1 volta in a1.

    Una soluzione che mi viene in mente su così su due piedi è di iniziare mettendo tutti i numeri pari in un vettore di appoggio v (anche le ripetizioni), ordinandoli mentre li inserisci. A questo punto esegui due cicli annidati su v: in quello esterno iteri su tutti gli elementi in cui sono contenuti dei numeri, mentre quello interno, conoscendo il numero presente nella cella in cui si trova attualmente il ciclo esterno, va avanti contando il numero di ripetizioni; a questo punto il ciclo esterno legge il numero di ripetizioni e, se maggiore di 1 (contando anche il primo elemento), copia il numero attuale in a2 e si sposta in avanti di un numero di elementi pari al numero di ripetizioni.

    quei due cicli annidati non so come farli potresti farmeli vedere?

    comunque più o meno ci sono

    #include<stdio.h>
    #define N 10
    int main(){
    int a[N],b[N],n,i;
    for(i=0;i<N;i++){
    scanf("%d ", &a);
    }
    for(i=0;i<N;i++){
    b=a;
    }

    for(i=0;i<N;i++){
    if(b%2==0){
    printf("%d", b);
    }
    da qui ho i valori pari e adesso come faccio a non farli ripete? non ho idea di come imppstare per far si che non si ripetano
  • Re: Vettori c

    for(i=0;i<N;i++){
    b[i]=a[i];
    }
    
    ora copia in b[] solo i valori pari presenti in a[] (occhio: non potrai utilizzare l'indice i anche per b[], ma solo per a[]...)
Devi accedere o registrarti per scrivere nel forum
6 risposte