|
|||||||
|
|
|
![]() |
|
|
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: 05:08.



















