Problema con esercizio in C di numeri ripetuti

di il
13 risposte

Problema con esercizio in C di numeri ripetuti

Ciao a tutti,
ho un problema con un esercizio che chiede di fare un programma che dato un numero dica se ci sono numeri che compaioni più di una volta e gli stampi,ho provato in questo modo ma non mi esce,avete dei consigli su come farlo funzionare?
#include <stdio.h>
#include <math.h>
#define N 4

int n,i,M,n1;
int array [N];
int array2 [N];
int j;
int uguali=1;

int main(int argc, char const *argv[]) {

  M=N-1;

  printf("\nInserire il numero: ");
  scanf("%d", &n);
  n1=n;
  for (i=0;i<N;i++) {
    while (n1>9) {       /* CICLO WHILE PER TROVARE n-esima CIFRA */
      n1=n1/10;
    }
    array[i]=n1;
    n=n-n1*pow(10,M);
    M--;
    n1=n;
  }

  for (i=0;i<N;i++) {
    array2[i]=array[i];
  }

  for (i=0;i<N;i++) {                     /*RICERCA DEI NUMERI*/
    for (j=0;j<N;j++) {
      if (array[i]== array2[j]) {
        printf("\n\n%d\n\n", array[i]);
      }
    }
  }
  return 0;
}

13 Risposte

  • Re: Problema con esercizio in C di numeri ripetuti

    Capiamoci ... volevi dire

    "dato un numero dica se ci sono cifre che compaiono più di una volta e le stampi"

    ?

    E cosa succede ? Perché non (ri)esce ?
  • Re: Problema con esercizio in C di numeri ripetuti

    oregon ha scritto:


    Capiamoci ... volevi dire

    "dato un numero dica se ci sono cifre che compaiono più di una volta e le stampi"

    ?

    E cosa succede ? Perché non (ri)esce ?


    Allora l'utente dal terminale deve inserire un numero

    il programma deve stampare quali sono i numeri che vengono ripetuti più di una volta

    per es. se l'utente immette :24352 il programma dovrà stampare 2

    Il mio problema è che il programma stampa il numero 2 però seguito da un numero negativo che non ha un senso che appaia nella printf
  • Re: Problema con esercizio in C di numeri ripetuti

    Non ripetere l'errore ... tu parli di "numeri ripetuti" e invece sono "cifre ripetute".

    Tu hai previsto N 4 ovvero un numero con 4 cifre. Ma po utilizzi un numero come 24352 che ne ha 5 cifre e quindi hai un problema di overflow del buffer. Devi prevedere un buffer più grande.
  • Re: Problema con esercizio in C di numeri ripetuti

    oregon ha scritto:


    Non ripetere l'errore ... tu parli di "numeri ripetuti" e invece sono "cifre ripetute".

    Tu hai previsto N 4 ovvero un numero con 4 cifre. Ma po utilizzi un numero come 24352 che ne ha 5 cifre e quindi hai un problema di overflow del buffer. Devi prevedere un buffer più grande.
    No,non è quello il problema,anche se uso un numero di 4 cifre non funziona lo stesso
  • Re: Problema con esercizio in C di numeri ripetuti

    Se usi un numero di 4 cifre cosa succede esattamente? Hai altri valori negativi? Non credo.

    Comunque, fidati delle risposte, la grandezza del buffer è COMUNQUE un problema. Non l'unico ma il più grave.
  • Re: Problema con esercizio in C di numeri ripetuti

    Perché hai aperto un altro thread per lo stesso problema? https://www.iprogrammatori.it/forum-programmazione/cplusplus/problema-con-esercizio-t32046.html
  • Re: Problema con esercizio in C di numeri ripetuti

    Tonmu ha scritto:


    Perché hai aperto un altro thread per lo stesso problema? https://www.iprogrammatori.it/forum-programmazione/cplusplus/problema-con-esercizio-t32046.html
    Perchè non era lo stesso problema ma un problema diverso,il primo thread verteva su come immettere dei numeri in un array,questo chiede perchè non funziona la stampa dei numeri doppi
  • Re: Problema con esercizio in C di numeri ripetuti

    oregon ha scritto:


    Se usi un numero di 4 cifre cosa succede esattamente? Hai altri valori negativi? Non credo.

    Comunque, fidati delle risposte, la grandezza del buffer è COMUNQUE un problema. Non l'unico ma il più grave.
    si,con 4 cifre ho ancora dei numeri negativi,la dimensione del buffer non è sicuramente il problema più grande
  • Re: Problema con esercizio in C di numeri ripetuti

    Con quale valore in input a 4 cifre?
  • Re: Problema con esercizio in C di numeri ripetuti

    oregon ha scritto:


    Con quale valore in input a 4 cifre?
    qualsiasi, ad es 2442 stampa solo tipo sei volte il 2 andando a capo
  • Re: Problema con esercizio in C di numeri ripetuti

    Veramente sono stampati dei 2 e dei 4 ma NON numeri negativi come mi avevi detto prima.
  • Re: Problema con esercizio in C di numeri ripetuti

    oregon ha scritto:


    Veramente sono stampati dei 2 e dei 4 ma NON numeri negativi come mi avevi detto prima.
    Ho riprovato adesso e hai ragione te, evididentmente per sbaglio avevo eseguito un altro programma che avevo fatto.
    Per caso sapresti dirmi perchè stampa tutti quei 2 ed 4 quando dovrebbe stampare solo un 2 e un 4?
  • Re: Problema con esercizio in C di numeri ripetuti

    Ecco vedi ... quindi il problema più grave era la dimensione del buffer (e non poteva essere diversamente).

    La seconda questione è nelle for
    
     for (i=0;i<N;i++) {                     /*RICERCA DEI NUMERI*/
        for (j=0;j<N;j++) {
          if (array[i]== array2[j]) {
            printf("\n\n%d\n\n", array[i]);
          }
        }
      }
    
    che confrontano ogni cifra con sé stessa. E' evidentemente un metodo sbagliato perché il primo 2 sarà confrontato con sé stesso oltre che con l'altro 2, all'andata e al ritorno ... e così per ogni cifra uguale ... e per questo avrai tutte quelle visualizzazioni ...

    Devi cambiare metodo, non usare un array2 copia di array ma usa un array che chiamerai cifre di 10 elementi tutti inizializzati a 0 all'avvio.
    E un solo ciclo for che aumenti ogni elemento quando trova la cifra corrispondente. Alla fine del ciclo avrai nel vettore cifre, per ogni cifra, quante volte si è presentata. Dovrai solo visualizzare le cifre che si sono presentate almeno 2 volte.
Devi accedere o registrarti per scrivere nel forum
13 risposte