• T4CH
  • NEWS
  • VIDEO
Forum > Software

In cerca dell'errore, programma c++

Discussione inserita in 'Software' da luke1996, 18 Febbraio 2012.

  1. luke1996 techUser

    Ciao a tutti, stamattina ho trovato un codice da compilare che dovrebbe permettere la realizzazione di dizionari, solo che dopo averlo compilato si avvia e si chiude immediatamente. Ho provato ad aggiungere stdio.h come libreria e inserire un gethar(), ma senza nessun esito. Suggerimenti?
    Code:
    #include <iostream>
    #include <stdlib.h>
    #include <fstream>
    
    using namespace std;
    
    ofstream output;
    
    bool doppio(char combinazione[],int n)
    {
      for(int i=0;i<n;i++)
      for(int k=0;k<n;k++)
        if(i!=k && combinazione[i]==combinazione[k])
        return true;
      return false;
    
    }
    
    void permutazioni(char caratteri[],int n)
    {
      int numero=0;
      int conta[n];
      char combinazione[n];
      for(int i=0;i<n;i++)
      conta[i]=0;
    
      while(conta[0]!=n) {
    
      for(int i=0;i<n;i++)
        combinazione[i]=caratteri[conta[i]];
     
      if(!doppio(combinazione,n)) {
      for(int i=0;i<n;i++)
        output << combinazione[i];
        output << endl;
        numero++;
      }
      conta[n-1]++;
      for(int i=n-1;i>=1;i--) {
        if(conta[i]==n)
        {
          conta[i]=0;
          conta[i-1]++;
          }
        }
      }
    }
    
    void usage()
    {
      cout << "EXAMPLE " << endl << "./generatore abcdefg 1 10\n";
      exit(1);
    }
    
    int main(int argc,char *argv[])
    {
      if(argc!=4)
      usage();
      output.open("dizionario.txt");
      for(int i=atoi(argv[2]);i<=atoi(argv[3]);i++)
      permutazioni(argv[1],i);
      output.close();
    return 0;
    }
    
    luke1996, 18 Febbraio 2012
    #1
  2. Rondell techMod

    prima di return 0 metti il comando system("PAUSE"); vedrai che smetterà di chiudersi in automatico ;)
    Rondell, 18 Febbraio 2012
    #2
  3. luke1996 techUser

    e invece lo fa ancora xD
    luke1996, 18 Febbraio 2012
    #3
  4. Rondell techMod

    azz...prova a farlo partire dal prompt dei comandi, senza cliccare sull'exe che crea...
    Rondell, 18 Febbraio 2012
    #4
  5. luke1996 techUser

    nada... cd alla directory, start generatore.exe, stesso problema... Compilo con dev-C++
    luke1996, 19 Febbraio 2012
    #5
  6. Falko techBoss

    luke1996 said: ↑
    nada... cd alla directory, start generatore.exe, stesso problema... Compilo con dev-C++
    A me pare giusto quel codice e comunque non ha bisogno di "start" per andare, dato che per altro si aspetta dei parametri, per cui giusto il fatto che si chiuda così come si apre, è esattamente ciò che mi aspetterei da un codice simile, dato un valore nullo tutti i ciclo fanno un controllo tipo "se 0=0 allora esci".

    lancialo come c'è scritto nella funzione "usage()":

    ./generatore abcdefg 1 10

    Ps: stdio e compagnia non servono a nulla, sto codice usa gli stream per direzionare l'output...
    Pps: anche se cambi compilatore gli header di base sono sempre gli stessi nel C (sto codice sembra ansi, ma non uso sto linguaggio da anni ed onestamente non me lo ricordo!)...
    Falko, 19 Febbraio 2012
    #6
  7. luke1996 techUser

    Ok, grazie xD
    luke1996, 19 Febbraio 2012
    #7
  8. luke1996 techUser

    Per caso sapete dirmi come impostarlo per tentare tutte le permutazioni? al momento prova solo quelle che contengono il primo dei caratteri di input e così via, quindi per le permutazioni a 3 caratteri con input abcd abd non esiste!
    luke1996, 19 Febbraio 2012
    #8
Password dimenticata?
SU TERMINI DI SERVIZIO CONTATTACI