Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77

    [C++] Array Palindromi e scissione di un numero nelle sue cifre

    Buonasera a tutti, ho un problema con questo programma: dato un array di dimensioni sconosciute preso da file, individuare nella sequenza numeri palindromi. Premetto che il testo dato lo trovo un pò ambiguo perchè non capisco se si riferisce alla caselle dell'array (es. 1|2|2|1|)diciamo così o proprio ai numeri al suo interno. Inizialmente ho fatto il programma in base alla prima interpretazione e non ho avuto problemi, al contrario invece della seconda. Il problema in sostanza è che non mi stampa l'avviso che la casella considerata presenta un numero palindromo, se invece metto la condizione inversa allora mi stampa il messaggio che non sono palindromi tante volte quando lo è la lunghezza dell'array,nel mio caso l'array è lungo 12 e mi esce 12 volte l'avviso il numero non è palindromo. Allora per chiarire int numeri l'ho usato per contare quanti numeri ci sono nel file riguardo la questione stampare, buff è una copia di numeri,quella su cui vado a lavorare, rest invece l'ho usata per salvare il resto e inv l'ho usata per fare l'inverso del numero per vedere se coincide con buff
    codice:
    #include <iostream>#include <fstream>
    #include <cstdlib>
    
    
    using namespace std;
    
    
    void leggi (int *vet,int dim);
    void stampa(int *vet,int dim);
    
    
    int main()
    {
        int buff,rest,inv;
        int dim = 0;
        int numeri;
        fstream file;
        file.open("dati.txt",ios::in);
        if(!file)
            cout << "Errore Apertura File";
    
    
        while(file >> numeri)
        {
    
    
            buff = numeri;
            dim++;
    
    
          do{
           rest=buff%10;
           inv=(inv*10)+rest;
           buff=buff/10;
            }while(buff!=0);
    
    
        if(inv!=numeri)
        cout<<"Non Sono Palindromi\n";
        }
    
    
    
    
    
    
        cout << "La dimensione del vettore e': " << dim;
        int *vet;
        vet = new int[dim];
    
    
        leggi(vet,dim);
        cout << "Il vettore stampato e': ";
        stampa(vet,dim);
        cout << "\n\n";
    
    
    
    
    
    
        cout << "\n\n";
        system("pause");
    }
    
    
    
    
    void leggi (int *vet,int dim)
    {
        fstream file;
        file.open("dati.txt",ios::in);
        if(!file)
        {
            cout<<"File non trovato"<<endl;
        }
    
    
    
    
         for(int i=0;i<dim;i++)
        {
             file>>vet[i];
        }
            file.close();
    
    
    
    
    
    
        cout << "\n\n";
    }
    
    
    
    
    void stampa(int *vet,int dim)
    {
        for(int i=0;i<dim;i++)
         {
             cout<< " | " << vet[i]<< " | ";
         }
    
    
        cout << "\n\n";
    }
    Ultima modifica di Mrhide1; 04-07-2016 a 18:17

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Non inizializzi mai inv
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Hai ragione infatti successivamente l'ho apportata questa modifica mettendo int inv = 0; ma mi fa una cosa strana nella stampa mette insieme la prima posizione,occupata dal numero 1,e la seconda posizione,occupata dal numero 1221 stampando così "11221 non è palindromo" ma non appena rimetto int inv senza inizializzarlo a zero ecco che stampa bene.

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Basta aggiungere un inv = 0 all'interno del while, come già avevo detto.
    Ecco la dimostrazione http://ideone.com/M7JjHR
    L'unica differenza col tuo codice è che legge da standard input al posto che da un file e che ho aggiunto un inv=0;
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    hai ragione avevo proprio dimenticato di mettere inv = 0 dentro il while,si sovrapponevano tutti i numeri invertiti e quindi nessun numero risultava mai palindromo. Grazie come al solito Scara sei la mia salvezza come sempre xD

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Di nulla
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.