PDA

Visualizza la versione completa : [c] funzione ricorsiva che visualizza coppie di numeri


Relisyss
28-12-2008, 16:51
Ciao a tutti....mi serve aiuto
Devo creare una funzione ricorsiva che visualizza sottoinsiemi di 2 cifre di un dato numero....
Cerco di spiegarmi meglio con un esempio
se ho il num 12345
la funzione deve restituirmi
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5
confido nel vostro aiuto e vi ringrazio anticipatamente
ciao :ciauz:

MrX87
28-12-2008, 16:58
bhè...prova un pò tu a scrivere un pò di codice...il forum è un luogo dove chiedere consigli non dove incaricare la gente a fare i programmi!

Relisyss
28-12-2008, 17:06
Certo scusami...hai ragione....
Il problema è che prima di scrivere del codice dovrei risolvere il problema "matematicamente"...è proprio ciò che non riesco a fare....

sotoli
28-12-2008, 17:24
Ciao...se il numero inserito ad esempio è 1545, deve visualizzare anche la coppia 5 5 oppure solo cifre diverse?

Relisyss
28-12-2008, 17:25
Ciao
deve mostrare anche 5 5...
grazie per l aiuto

sotoli
28-12-2008, 17:33
Comunque ha ragione MrX87...prova a scrivere qualche riga di codice, anche perché il problema si può risolvere in vari modi.

Relisyss
28-12-2008, 17:40
mi viene subito in mente che la sequenza di numeri deve essere una stringain modo da poter gestire ogni singolo elemento....


#include <stdio.h>
#include <stdlib.h>
int subset (char numero[],int n);
int main()
{
char numero [5];
int n;
n=-1;
printf ("Inserisci una numero di 4 cifre");
printf ("\nad esempio '1234' --->\n\n");
scanf ("%s", &numero);
subset (numero,n);
system("PAUSE");
return 0;

}

int
subset(char numero[],int n)
{
if (n!=4)
printf ("%c%c" ,numero[n],numero[n+1]);
else
subset(numero, n+1);
}

una cosa del genere
prendete con le pinze cio che ho scritto...
sicuramente non funge...è solo un inizio

Cell
29-12-2008, 00:27
Provo a spiegarti a parole mie anche se con la ricorsione non ho ormai più tanta pratica (quindi pure se terminologicamente mi esprimo male non sopprimetemi :D). Ad occhio direi che il caso base è quello in cui hai due cifre (ad es. le prime due), per cui l'unica coppia è data proprio da tali due cifre. Nel caso più generale, invece, hai k cifre, e il risultato sarà dato dal risultato dell'esecuzione sulle prime k-1 cifre, più tutte le coppie che si hanno mettendo assieme ciascuna delle prime k-1 cifre con la k-esima.

MrX87
29-12-2008, 13:43
ehilà, ho dato un'occhiata al codice che hai scritto e a qualche ragionamento che è stato scritto, ma comunque dal punto di vista matematico, purtroppo non so aiutarti, mi dispiace, mentre dal punto della programmazione, guardando il tuo programma, dico innanzi tutto perchè usi le stringhe??

char numero [5];
e poi se proprio vuoi usare le stringhe, almeno usale bene, perchè questo non è del tutto corretto, le stringhe non si leggono così:

scanf ("%s", &numero);ma così:

scanf ("%s", numero); ovvero senza la & commerciale.
comunque non sta qua il problema, il fatto sta nella ricorsione, devi cercare un modo per rimanere sul primo elemento e iteri fino alla fine, dopo di chè ricorri sull'elemento successivo, ovvero sul secondo e iteri dal secodo fino alla fine, poi ricorri sul 3 elemento e iteri fino alla fine e così via, fino a quando non arrivi a ricorrere sull'ultimo elemento...spero che un pò mi sia spiegato, comunque se ci sono problemi posta tutto quello che vuoi...ciao

Vincenzo1968
29-12-2008, 23:33
#include <stdio.h>
#include <string.h>

void subset(char *str, int x)
{
int k;

if ( x > strlen(str) - 2 )
return;

for(k = x + 1; k < strlen(str); k++)
printf("%c %c\n", *(str+x), *(str+k));

subset(str, ++x);
}

int main()
{

char *str = "12345";

subset(str, 0);

return 0;
}


:ciauz:

Loading