Oppure

Loading
06/01/20 13:31
andreapagani

#include <stdio.h>
char *cantor(char[], int, int);


int main() {

char v[27];

for(int i = 0; i<27; i++){
v[i] = ' ';

}

cantor( v, 0, 26);




return 0;
}

char *cantor(char str[], int posizioneInizioStringa, int posizioneFineStringa){

if(posizioneFineStringa == posizioneInizioStringa ){
return str;

}

int a = (posizioneFineStringa + 1)/3;


for(int i=0; i<a; i++){
str = '#';

}

cantor(str, 0, a);

for(int i=a; i<2*a; i++){
str = '.';

}

cantor( str, a, 2*a);

for(int i = 2*a; i<posizioneFineStringa; i++){
str = '#';
}

cantor(str, 2*a, posizioneFineStringa);



return str;

}



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 &quot;parti&quot; 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 08/01/20 11:14
aaa
06/01/20 14:25
Ultimo
Stai lavorando su un Array quindi riguardati il codice che hai scritto
If ok Then GOTO Avanza else GOTO Inizia

06/01/20 14:26
Ultimo

Attendo la risposta dei Maestri :k:
If ok Then GOTO Avanza else GOTO Inizia

06/01/20 14:44
nessuno
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à.
06/01/20 20:47
AldoBaldo
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:

01 char: #
02 char: ##
03 char: #.#
04 char: #..#
05 char: ##.##
06 char: ##..##
07 char: ##...##
08 char: #.#..#.#
09 char: #.#...#.#
10 char: #.#....#.#
11 char: #..#...#..#
12 char: #..#....#..#
13 char: #..#.....#..#
14 char: ##.##....##.##
15 char: ##.##.....##.##
16 char: ##.##......##.##
17 char: ##..##.....##..##
18 char: ##..##......##..##
19 char: ##..##.......##..##
20 char: ##...##......##...##
21 char: ##...##.......##...##
22 char: ##...##........##...##
23 char: #.#..#.#.......#.#..#.#
24 char: #.#..#.#........#.#..#.#
25 char: #.#..#.#.........#.#..#.#
26 char: #.#...#.#........#.#...#.#
27 char: #.#...#.#.........#.#...#.#
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 06/01/20 20:49
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
07/01/20 10:28
andreapagani
mi manderesti il tuo codice Aldo baglio? perché a me dà un problema di segmentazione fault ma non capisco come risolverlo
aaa
07/01/20 19:41
AldoBaldo
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 07/01/20 20:00
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
07/01/20 22:58
Goblin
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 ...
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:

01 char: #
02 char: ##
03 char: #.#
04 char: #..#
05 char: ##.##
06 char: ##..##
07 char: ##...##
08 char: #.#..#.#
09 char: #.#...#.#
10 char: #.#....#.#
11 char: #..#...#..#
12 char: #..#....#..#
13 char: #..#.....#..#
14 char: ##.##....##.##
15 char: ##.##.....##.##
16 char: ##.##......##.##
17 char: ##..##.....##..##
18 char: ##..##......##..##
19 char: ##..##.......##..##
20 char: ##...##......##...##
21 char: ##...##.......##...##
22 char: ##...##........##...##
23 char: #.#..#.#.......#.#..#.#
24 char: #.#..#.#........#.#..#.#
25 char: #.#..#.#.........#.#..#.#
26 char: #.#...#.#........#.#...#.#
27 char: #.#...#.#.........#.#...#.#
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

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 redibis non morieris in bello