|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Casi di palindromia
Ciao a tutti questo l'ho fatto TUTTO da solo....è un po un pacco a vederlo...ma da soddisfazione perche va...e perchè mi dimostra che qualcosa ho capito.....
![]() Dovevo fare un esercizio che inserita una parola, la memorizza in un'array di caratteri, e verifica se tale parola risulta palindroma...cioè se leggendola da dx verso sx è come leggerla da sx verso dx.... es: anna-----> anna ovo----->ovo nel caso non fosse palindroma, devo scrivere la parola memorizzata seguita da....bho non so dirlo ma vi faccio un esempio..... metallica--------> metallicacillatem pantera---------> panteraretnap stratovarius----->stratovariusuiravotarts così l'ho partorito io: #include <stdlib.h> #include <stdio.h> #include <string.h> #define DIM 10 int main() {int c,x=0; int i=2; char*p,*g; char str[DIM]; printf ("Scrivi una parola\n"); scanf ("%s",str); x=strlen (str); p=&str[x/2]; g=&str[(x/2)-1]; if (*p!=*g) {{printf ("%s",str); for (c=1; c<x; c++) {printf ("%c", str[x-i]); i++;} } printf ("\n");} else printf("La parola %s risulta palindroma\n",str); system("PAUSE"); return 0; } Suggerimenti per accorciarlo? Commenti e altro ben vengano...ciao!! ![]()
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cosa fa questo "if (*p!=*g)" ?
Inoltre a cosa servono quelle due '{' dopo l'if ? Una la puoi eliminare... In ogni caso cerca di mantenere una certa indentazione che ti permette di individuare gli errori...ad esempio per le grafe solitamente si usano due standard : Codice:
istruzione { istruzione; } oppure: istruzione { istruzione; } Hai detto di accorciarlo ? Io allora farei così : Codice:
#include <stdlib.h> #include <stdio.h> #include <string.h> #define DIM 10 int main() { int flag, i, j; char str[DIM]; printf("Scrivi una parola : "); scanf("%s", str); /*questo serve a verificare che sia palindroma*/ for(flag=i=0, j=strlen(str)-1; i<j && !flag;) flag = (str[i++] != str[j--]); printf("\nLa parola %s %srisulta palindroma\n\n", str, flag?"non ":""); if(flag) { printf("%s", str); for(i=strlen(str)-1; i>0; --i) printf("%c", str[i]); printf("\n\n"); } system("PAUSE"); return 0; } ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
Allora...la parola palindroma senza senso ci tocca farla perche non sapevano come romperci i c@gli@ni con sti esercizi.... inserita una parola dall'utente noi dovviamo riportare a video " La parola che hai inserito è palindroma" nel caso non lo fosse avremmo dovuto scrivere quella cazz@t@ di parola invertita...(o che ce ne posso? il testo dell'eserc. era così!) ![]() if (*p!=*g)" così non controllo se il contenuto di queipuntatori è lo stesso?? 'a'=='a' 'f'=='f' le due '{' era solo perche non riuscivo ad andare a capo dopo il printf ..... o il printf entrava nel ciclo precedente o mi dava noie con l'else successivo datoche si trova in mezzo al comando if-else il compilatore mi dava errore se non la mettevo... ahh e cos'è il tag CODE del forum??? come lo abilito?? ciao grazie
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Guarda ora ho fatto delle modifiche...comunque non capisco come possa una parola risultare palindroma con il tuo metodo...
Riguardo al blocco di grafe...scommetti che togliendo la grafa dopo l'if e prima di printf ("\n"); il programma funzionerà nello stesso modo ? |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jan 2002
Città: VENICE
Messaggi: 1241
|
Quote:
mmm adesso che lo riguardo...mi sa proprio che hai ragione....forse avevo fatto un po di casino.... ![]() perche non è giusto il mio confronto? ah..dimmi di sti TAG CODE... mm a priama vista sembra un bel casino la tua soluzione all'esercizio....sia chiaro.... perche io sono un principiante...non mi permetterei giudizi altrimenti.... ![]() ![]()
__________________
...Fight with your heart, and you're Destined For Glory But fight without soul and you will loose it all... |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Con "if (*p!=*g)" non fai altro che controllare se str[x/2] == str[(x/2)-1]...
Prova ad inserire una parola palindroma con un numero di lettere dispari e vedrai che non funziona... Riguardo al TAG CODE : {code} /*qui ci scrivi il codice*/ {/code} Al posto delle grafe devi emttere le quadre... Riguardo al mio codice ora te lo sviluppo un po'...così lo capisci meglio : Codice:
#include <stdlib.h> #include <stdio.h> #include <string.h> #define DIM 10 int main() { int flag, i, j; char str[DIM]; printf("Scrivi una parola : "); scanf("%s", str); /*questo serve a verificare che sia palindroma*/ flag = 0; i=0; j=strlen(str)-1; /*ora scorro gli indici del vettore a partire dal primo a quello centrale e dall'ultimo a quello centrale*/ /*quando flag vale 1 significa che ho trovato un elemento che che soddisfa l'if interno...quindi esco*/ while(i<j) /*quando i diventa >= j sono all'elemento centrale*/ { if(str[i] != str[j]) { flag = 1; break; /*esco dal ciclo*/ /*prima uscivo grazie al controllo su flag*/ } i++; j--; } /*l'operatore ternario espressione?statement:statement equivale ad un if-else Ad esempio : a = (b==0)? 1 : 4; Se b==0 assegno ad a 1 altrimenti 4 Prima stampavo la stringa "non " se flag (che equivale a dire se flag è vero, cioè se flag != 0 altrimenti stampavo una stringa vuota*/ if(flag != 0) printf("\nLa parola %s non risulta palindroma\n\n", str); else printf("\nLa parola %s risulta palindroma\n\n", str); if(flag == 1) /*se non è palindroma*/ { printf("%s", str); for(i=strlen(str)-2; i>=0; --i) /*qui avevo sbagliato*/ printf("%c", str[i]); printf("\n\n"); } system("PAUSE"); return 0; } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:39.