PDA

View Full Version : Programma in C


salvo.p.dj
19-05-2010, 11:48
Salve a tutti, sono nuovo del forum, e di linguaggio oltre all'italiano non ne conosco alcuno :mc:
"Ho" (trovato su google) compilato il seguente programma che serve a combinare lettere e numeri:
#include <stdio.h>
#include <string.h>

#define MAX 999999
int main (void)
{
char buff[MAX],*pbuff;
char tokn[MAX];
int l,k;
int i,j,p;

printf ("Digita il nome: ");
scanf ("%s",&buff);

l=strlen(buff);

printf ("Digita k (1..%d): ",l);
scanf ("%d",&k);
if (k<1 || k>l)
return 1;

pbuff=&buff[0];
do
{
for (i=0;i<l-(k-1);i++)
{
p=0;
tokn[p++]=*pbuff;
for (j=i+1; j<i+k && j<l;j++)
tokn[p++]=*(pbuff+j);
tokn[p]='\0';

do
{
printf ("%s\n",tokn);
tokn[p-1]=*(pbuff+j);
}while (j++<l);
}

pbuff++;
l--;
}while (1);

fflush(stdin);
getchar();}

L'unica cosa che ho aggiunto io è questa:
fflush(stdin);
getchar();}
perchè il promp dei comandi si chiudeva alla fine del calcolo.
Il problema è che facendo combinare per esempio 800 lettere i risultati non vengono visualizzati tutti ma solo una parte, gli altri scompaiono con l'avanzamento del calcolo.
Come faccio ad ottmizzare il codice affinchè esca un txt di report con tutti i risultati? :muro:
Grazie anticipate.
Saluti.

deadlyomen17
19-05-2010, 13:18
puoi creare un file (da codice C) e scriverci dentro il tuo output, per fare questo devi studiare la gestione file in C, che non è comunque molto difficile, ma magari per una persona che ha appena iniziato non è la cosa più indicata.
una semplice guida la trovi qui -> Input output su file (http://programmazione.html.it/guide/lezione/1114/introduzione-input-e-output-su-file/)

un metodo indipendente dal codice che ti permette di scrivere l'output del tuo programma su un file è quello di usare l'operatore di redirezione output >
supponendo che il tuo programmino C si chiami mycode.c, e che tu lo compili come mycode, per ottenere l'output in un file ti basta aggiungere "> file.txt" al comando per avviare il tuo programma

es in GNU/Linux
$ ./myprog > file.txt

in Windows
myprog.exe > file.txt

shinya
19-05-2010, 13:29
do
{
for (i=0;i<l-(k-1);i++)
{
p=0;
tokn[p++]=*pbuff;
for (j=i+1; j<i+k && j<l;j++)
tokn[p++]=*(pbuff+j);
tokn[p]='\0';

do
{
printf ("%s\n",tokn);
tokn[p-1]=*(pbuff+j);
}while (j++<l);
}

pbuff++;
l--;
}while (1);


Sono io, o da quel do-while(1) non si esce mai? Prima o poi a forza di fare "l--;" succederà che "j >= l" e non stamperà più una sega.
A parte questo... non ho capito cosa tu stia cercando di ottenere. Puoi fare un esempio di input/output previsti?

salvo.p.dj
19-05-2010, 13:46
Salva a tutti, innanzitutto vi ringrazio per le tempestive risposte, il codice l'ho trovato su google, io non capisco una MaZza, :help:
A me servirebbe un semplicissimo programma che inserendo i dati mi dia tutte le combinazioni possibili, PREMETTO CHE NON SI TRATTA TI ATTACCO BRUTE FORCE!!!! Io dovrei combinare, o solo numeri o solo lettere.
Proprio adesso ho trovato questo, che è molto meglio di quello postato precedentemente, o meglio si avvicina di più a quello che mi serve, eccolo:
#include <string>
#include <iostream>
using namespace std;

void Anagramma(string A, string B)
{
if (A.size() == 0) cout << B << endl;
else
{
string Doppie;
for (int i = 0; i < A.size(); i++)
{
char temp[2];
temp[0] = A[i]; temp[1] = '\0';
if (Doppie.find(temp, 0) == string::npos)
{
A.erase(i, 1);
Anagramma(A, B + temp);
Doppie += temp;
A.insert(i, temp);
}
}
}
}
int main()
{
string A;
cin >> A;
cout << endl;
Anagramma(A, "");
Il problema però rimane il fatto che se inserisco una parola lunga esempio BARBABIETOLA il programma avvia il calcolo e scorrendo cercando di combinare le lettere, mi elimina i vecchi risultati cioè scompaiono dalla finestra mostrandomi solo l'ultimo milione di essi, perchè?
Spero di essere stato chiaro....:rolleyes:
Come posso modificare il codice affinchè esso esca un file TXT dove compaiono tutti i risultati?
Vi ringrazio ancora per eventuali risposte!

wingman87
19-05-2010, 13:58
Ti ha già risposto deadlyomen17

deadlyomen17
19-05-2010, 13:58
Come posso modificare il codice affinchè esso esca un file TXT dove compaiono tutti i risultati?

come ottenere un txt te l'ho detto prima. se non conosci il C ti conviene usare la redirezione output.

salvo.p.dj
23-05-2010, 18:59
Scusate se vi ringrazio in ritardo ho avuto qualche piccolo problemino di salute!
GRAZIE ANCORA A TUTTI SIETE MITICI!!! Alla prossima!!!!
Saluti Salvo