Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema con ricorsione
Forum - C/C++ - problema con ricorsione

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
andreapagani (Normal User)
Newbie


Messaggi: 2
Iscritto: 06/01/2020

Segnala al moderatore
Postato alle 14:31
Lunedì, 06/01/2020
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. char *cantor(char[], int, int);
  3.  
  4.  
  5. int main() {
  6.  
  7. char v[27];
  8.  
  9. for(int i = 0; i<27; i++){
  10. v[i] = ' ';
  11.  
  12. }
  13.  
  14. cantor( v, 0, 26);
  15.  
  16.  
  17.  
  18.  
  19. return 0;
  20. }
  21.  
  22. char *cantor(char str[], int posizioneInizioStringa, int posizioneFineStringa){
  23.  
  24. if(posizioneFineStringa == posizioneInizioStringa ){
  25. return str;
  26.  
  27. }
  28.  
  29. int a = (posizioneFineStringa + 1)/3;
  30.  
  31.  
  32. for(int i=0; i<a; i++){
  33. str = '#';
  34.  
  35. }
  36.  
  37. cantor(str, 0, a);
  38.  
  39. for(int i=a; i<2*a; i++){
  40. str = '.';
  41.  
  42. }
  43.  
  44. cantor( str, a, 2*a);
  45.  
  46. for(int i = 2*a; i<posizioneFineStringa; i++){
  47. str = '#';
  48. }
  49.  
  50. cantor(str, 2*a, posizioneFineStringa);
  51.  
  52.  
  53.  
  54. return str;
  55.  
  56. }



ho compilato questo codice ma mi dà thread exc bad access quando lo faccio andare, qualcuno sa aiutarmi?
qui sotto vi lascio il testo dell'esercizio

Una stringa (di lunghezza a piacere) che contiene solo caratteri ?#? e ?.? può essere una rappresentazione della così-detta polvere di Cantor (mono-dimensionale) se costruita nel modo seguente:
1. si pensa il numero di celle della stringa come diviso in tre parti, ciascuna della stessa lunghezza (a meno di un carattere in aggiunta o in difetto)
2. le celle delle parti a sinistra e a destra vengono riempite con caratteri ?#?
3. le celle della parte centrale vengono riempite con caratteri ?.?
4. Ciascuna parte contenente i ?#? viene modificata come descritto nei punti 1., 2., 3. (cioé divisa
in tre parti, con le parti esterne contenenti ?#? e quella centrale contenente ?.? ), ...., ricorsivamente fino ad arrivare ad avere "parti" composte da zero oppure una singola cella.
Esempio: un array di caratteri con 9 celle contenete polvere di cantor è: #.#...#.#
Scrivere sottoprogramma che, preso un array di caratteri, lo riempia come una stringa che rappresenta la
polvere di Cantor. Scrivere un programma main() che visualizza la stringa creata dal sottoprogramma. Suggerimento:
...Cantor(char str[],
int posizioneInizioStringa,
int posizioneFineStringa)

Ultima modifica effettuata da Thejuster il 08/01/2020 alle 12:14
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 840
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 15:25
Lunedì, 06/01/2020
Stai lavorando su un Array quindi riguardati il codice che hai scritto


Ultimo (Hai voluto la bicicletta ? ....)

Studiare LINQ, WPF, ASP.NET MVC, Entity Framwork, C#, Blend, XAML, Javascript, HTML5, CSS .....(tanta roba)

https://www.dropbox.com/s/c2aots5x4urgbhf/setup_game_sudoku ...
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 840
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 15:26
Lunedì, 06/01/2020

Attendo la risposta dei Maestri :k:


Ultimo (Hai voluto la bicicletta ? ....)

Studiare LINQ, WPF, ASP.NET MVC, Entity Framwork, C#, Blend, XAML, Javascript, HTML5, CSS .....(tanta roba)

https://www.dropbox.com/s/c2aots5x4urgbhf/setup_game_sudoku ...
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5955
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:44
Lunedì, 06/01/2020
Hai postato anche su iprogrammatori.it


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 450
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 21:47
Lunedì, 06/01/2020
Siccome la ricorsione mi fa sempre girare la testa, ho voluto cogliere la palla al balzo e cimentarmi con quest'esercizio.
L'ho risolto anche per le stringhe che hanno dimensioni che non siano potenze del tre, cosa che non ho ben capito se rientra nelle richieste della traccia o meno. La mia risoluzione dà uscite di questo genere:

Codice sorgente - presumibilmente Plain Text

  1. 01 char: #
  2. 02 char: ##
  3. 03 char: #.#
  4. 04 char: #..#
  5. 05 char: ##.##
  6. 06 char: ##..##
  7. 07 char: ##...##
  8. 08 char: #.#..#.#
  9. 09 char: #.#...#.#
  10. 10 char: #.#....#.#
  11. 11 char: #..#...#..#
  12. 12 char: #..#....#..#
  13. 13 char: #..#.....#..#
  14. 14 char: ##.##....##.##
  15. 15 char: ##.##.....##.##
  16. 16 char: ##.##......##.##
  17. 17 char: ##..##.....##..##
  18. 18 char: ##..##......##..##
  19. 19 char: ##..##.......##..##
  20. 20 char: ##...##......##...##
  21. 21 char: ##...##.......##...##
  22. 22 char: ##...##........##...##
  23. 23 char: #.#..#.#.......#.#..#.#
  24. 24 char: #.#..#.#........#.#..#.#
  25. 25 char: #.#..#.#.........#.#..#.#
  26. 26 char: #.#...#.#........#.#...#.#
  27. 27 char: #.#...#.#.........#.#...#.#
  28. eccetera...



...e va be'. Poi, però, ho cercato "polvere di cantor" su "Wikipedia" e ho trovato una definizione nella quale non si parla di vettori, bensì di matrici. In altre parole, si dice che la "polvere di cantor" è un costrutto bidimensionale (in effetti l'immagine illustrativa riporta un quadrato che contiene altri quadrati, come in una specie di "frattale" - non so niente sui frattali, quindi non so se ho usato la parola a sproposito).

Qual è l'interpretazione corretta?

Ultima modifica effettuata da AldoBaldo il 06/01/2020 alle 21:49


Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!
PM Quote
Avatar
andreapagani (Normal User)
Newbie


Messaggi: 2
Iscritto: 06/01/2020

Segnala al moderatore
Postato alle 11:28
Martedì, 07/01/2020
mi manderesti il tuo codice Aldo baglio? perché a me dà un problema di segmentazione fault ma non capisco come risolverlo

PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 450
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 20:41
Martedì, 07/01/2020
Lo farei anche, ma è vietato.

A me quel che (di solito) fa sbagliare i programmi che richiedono ricorsioni è l'impostazione delle condizioni di return, il che mi porta a "saturare" lo stack con dei crash a volte spettacolari! Per questo ho preso in considerazione il tuo esercizio: per fare esercizio.

Non so se la saturazione dello stack sia un problema anche del tuo codice (non l'ho provato).

Ultima modifica effettuata da AldoBaldo il 07/01/2020 alle 21:00


Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!
PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 303
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 23:58
Martedì, 07/01/2020
Testo quotato

Postato originariamente da AldoBaldo:
Siccome la ricorsione mi fa sempre girare la testa, ho voluto cogliere la palla al balzo e cimentarmi con quest'esercizio.


L'ho pensato anche io ...
Testo quotato

Postato originariamente da AldoBaldo:
L'ho risolto anche per le stringhe che hanno dimensioni che non siano potenze del tre, cosa che non ho ben capito se rientra nelle richieste della traccia o meno. La mia risoluzione dà uscite di questo genere:

Codice sorgente - presumibilmente Plain Text

  1. 01 char: #
  2. 02 char: ##
  3. 03 char: #.#
  4. 04 char: #..#
  5. 05 char: ##.##
  6. 06 char: ##..##
  7. 07 char: ##...##
  8. 08 char: #.#..#.#
  9. 09 char: #.#...#.#
  10. 10 char: #.#....#.#
  11. 11 char: #..#...#..#
  12. 12 char: #..#....#..#
  13. 13 char: #..#.....#..#
  14. 14 char: ##.##....##.##
  15. 15 char: ##.##.....##.##
  16. 16 char: ##.##......##.##
  17. 17 char: ##..##.....##..##
  18. 18 char: ##..##......##..##
  19. 19 char: ##..##.......##..##
  20. 20 char: ##...##......##...##
  21. 21 char: ##...##.......##...##
  22. 22 char: ##...##........##...##
  23. 23 char: #.#..#.#.......#.#..#.#
  24. 24 char: #.#..#.#........#.#..#.#
  25. 25 char: #.#..#.#.........#.#..#.#
  26. 26 char: #.#...#.#........#.#...#.#
  27. 27 char: #.#...#.#.........#.#...#.#
  28. eccetera...




Si io ho fatto un po' di test, prima ho risolto la ricorsione del "cantor set" con le potenze di tre, dunque 3,9,27,81...
e i risultati vengono in linea con i tuoi
Poi ho giocato un po' con il codice per allineare i risultati in base alle richieste e prendendo spunto dai tuoi risultati ho tirato fuori 2 serie di risultati, uno lasciando l'algoritmo "base" e un secondo cercando di equilibrare i risultati per stringhe che no siano potenze di tre

Testo quotato

Postato originariamente da AldoBaldo:
...e va be'. Poi, però, ho cercato "polvere di cantor" su "Wikipedia" e ho trovato una definizione nella quale non si parla di vettori, bensì di matrici. In altre parole, si dice che la "polvere di cantor" è un costrutto bidimensionale (in effetti l'immagine illustrativa riporta un quadrato che contiene altri quadrati, come in una specie di "frattale" - non so niente sui frattali, quindi non so se ho usato la parola a sproposito).

Qual è l'interpretazione corretta?



Si ... quale è l'interpretazione corretta?? si lascia la ricorsione "base" oppure bisogna apportare piccole modifiche in base alle dimesioni della stringa?

Se serve a qualcuno posso postare il sorgente, non è C, ma Pascal, ma credo che cambia poco.

Un saluto


Ibis et redibis non morieris in bello
PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 450
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 0:33
Mercoledì, 08/01/2020
Piacerebbe anche a me che ci si potesse scambiare le risoluzioni senza troppi patemi, ma così non è. Magari un giorno si rivedrà quest'impostazione, non so, ma al momento il regolamento lo vieta. Io l'ho buttata lì, hai visto mai... :heehee:


Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo