Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    riconoscimento anagrammi

    Sono un'imbranata neofita.

    Sto cercando di creare un programmino che prendendo in ingresso una frase restituisca una lista delle parole che sono lì presenti insieme ad un loro anagramma.
    Faccio un esempio:
    all'inserimento della frase "remo mangiando more" dovrebbe rimandare un output del tipo:
    (remo, more).

    Qualcuno può suggerirmi un algoritmo adeguato?

    Mi ci sto rincretinendo

  2. #2
    Ciao! Innanzitutto che linguaggio?

    Inoltre non ho ben capito il quesito... cioé dalla frase:
    "pippo ruba la palla"

    dovresti estrapolare tutte le parole (pippo, ruba, la, palla) o solo alcune?

    Dopo devi anagrammare le singole parole? Vorrei capire...
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  3. #3
    ...ma che bella figura da cioccolataia!

    il linguaggio che sto cercando di imparare è il C...

    Il programma deve solo riconoscere le parole che sono l'anagramma l'una dell'altra.
    "un ramo di mora rema nel mare" dovrebbe restituire le coppie "ramo,mora" e "rema, mare".
    E' bello essere vivi: ci sono un sacco di cose che non si possono fare da morti...

  4. #4
    Ah ok ora mi è chiaro, solo di quelle parole che hanno le stesse lettere

    Bhé io ti consiglierei prima di, isolare tutte le parole, infine confrontarle tutte fra di loro per controllare se hanno le stesse lettere, magari ti fai una funzione ad hoc che restituisce 1 quando le 2 parole passate contengono le stesse lettere, se i tuoi dubbi oltre che logici erano anche di una possibile sintassi del programma, chiedi pure
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  5. #5
    Maestro.

    Umile al suo cospetto ammetto una preparazione piuttosto sommaria del linguaggio in discussione (diciamo dell'ordine dei 4 giorni), la sintassi che ho in mente io è una specie di blob primoridiale molto simile al passato di verdure col quale mi diletta alle volte mia nonna.

    Io non ho nemmeno capito come acquisire una stringa e dividerla in parole in modo da poter fare il confronto di cui parli!!!

    Da qualche parte devo cominciare...
    E' bello essere vivi: ci sono un sacco di cose che non si possono fare da morti...

  6. #6
    ...sembrerà strano... ma la funzione per il confronto credo di averla fatta...

    Ho veramente difficoltà ad acquisire la stringa e a dividerla in parole in modo da poter utilizzare la funzione per il confronto!
    Sono grave?
    E' bello essere vivi: ci sono un sacco di cose che non si possono fare da morti...

  7. #7
    Eheheh.. tranquilla, facciamo le cose passo passo!

    Brava hai fatto una cosa, adesso potresti dividere le parole semplicemente cercando con un if il carattere spazio, appena c'è il carattere spazio sai che la parola finisce e così via.

    Un esempio potrebbe essere:
    codice:
    #include <stdio.h>
    #include <conio.h>
    
    #define MAX_PAROLE 1000
    #define MAX_CARATTERI 512
    
    int main()
    {
    	char frase[MAX_CARATTERI], parole[MAX_PAROLE][MAX_CARATTERI];
    	int i, p = 0;
    
    	printf("Inserisci la frase: ");
    	scanf("%512[^\n]", frase); //Ho messo [^\n] per far sì che legga fino alla fine, altrimenti si ferma al primo spazio
    
    
    	for (i = 0; frase[i]; i++) //Ciclo che va da 0 fino alla fine della stringa
    	{
    		if (frase[i] != ' ') //Se il carattere corrente è diverso da uno spazio
    		{
    			strncat(parole[p], frase + i, 1); //copio sulla stringa "parole" dell'indice p, il carattere corrente
    		}
    
    		else //Se + uno spazio
    		{
    			p++; //Incremento p, in modo da immagazzinare un altra parola
    		}
    	}
    
    
    	printf("Frase acquisita: %s\n\nOutput:\n", frase);
    
    	for (i = 0; i < p+1; i++) //Ciclo che va da 0 a p+1 (+1 perché deve leggere anche l'ultima parola trovata)
    	{
    		printf("%s\n", parole[i]); //Stampo la parola
    	}
    
    	getch();
    
    	return 0;
    }
    Ti basterebbe usare la tua funzione che confronta da quella lista di parole
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  8. #8
    uhm... :master:

    il fatto che mi dica:
    conio.h: no such file or directory
    implica che mi manca qualche libreria o che l'universo congiura contro di me?

    comunque grazie mille!

    cercherò di rifletterci domattina a mente fresca
    E' bello essere vivi: ci sono un sacco di cose che non si possono fare da morti...

  9. #9
    Originariamente inviato da tirattera
    uhm... :master:

    il fatto che mi dica:
    conio.h: no such file or directory
    implica che mi manca qualche libreria o che l'universo congiura contro di me?
    Implica che Emulator ha scritto un programma che usa una funzione e un include non standard, di cui si può fortunatamente fare a meno, e si è dimenticato un include (capita a tutti ).
    Prova così:
    codice:
    #include <stdio.h>
    #include <string.h>
    
    #define MAX_PAROLE 1000
    #define MAX_CARATTERI 512
    
    int main()
    {
    	char frase[MAX_CARATTERI], parole[MAX_PAROLE][MAX_CARATTERI];
    	int i, p = 0;
    
    	printf("Inserisci la frase: ");
    	scanf("%512[^\n]", frase); //Ho messo [^\n] per far sì che legga fino alla fine, altrimenti si ferma al primo spazio
    
    
    	for (i = 0; frase[i]; i++) //Ciclo che va da 0 fino alla fine della stringa
    	{
    		if (frase[i] != ' ') //Se il carattere corrente è diverso da uno spazio
    		{
    			strncat(parole[p], frase + i, 1); //copio sulla stringa "parole" dell'indice p, il carattere corrente
    		}
    
    		else //Se + uno spazio
    		{
    			p++; //Incremento p, in modo da immagazzinare un altra parola
    		}
    	}
    
    
    	printf("Frase acquisita: %s\n\nOutput:\n", frase);
    
    	for (i = 0; i < p+1; i++) //Ciclo che va da 0 a p+1 (+1 perché deve leggere anche l'ultima parola trovata)
    	{
    		printf("%s\n", parole[i]); //Stampo la parola
    	}
    
    	getchar();
    
    	return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    ... grazie...

    per quanto ne so io "conio" è solo una parolaccia in spagnolo...

    Effettivamente ora funziona tutto!
    E' bello essere vivi: ci sono un sacco di cose che non si possono fare da morti...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.