Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-01-2008, 19:45   #1
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
[C] _ parola palindroma

Salve a tutti, sto cercando di creare un programma con le funzioni in grado di riconoscere le parole palindroma ma sembra non funzionare (dà errore nel compilare...)


#include <stdio.h>
#include <string.h>
int pali(int a,char stringa);

typedef char stringa[10];

int main () {

stringa parola;
int var1;
printf ("Inserisci parola");
scanf ("%s", parola);
int j=0;
j = pali(int var1, char parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, char parola)
{ int j;
int k;
int i=0;
k = sizeof parola;
while (k!=i)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;}


Idee in merito??
Grazie!!!!

Ultima modifica di pietrone86 : 10-01-2008 alle 19:50.
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 20:22   #2
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Allora, direi che ci sono parecchi errori:
  • Per chiamare la funzione pali non devi mettere il tipo: j = pali(var1, parola);
  • La variabile var1 non è inizializzata
  • la funzione pali accetta un int e una char ma gli passi un int e una stringa

Penso sia più o meno tutto...
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 20:25   #3
magix2003
Senior Member
 
L'Avatar di magix2003
 
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
Oltretutto, sono quasi certo che l'algoritmo sia sbagliato. Credo che se tu sei alle prime armi sia meglio che tu segua un approccio ricorsivo.
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole"

magix2003 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 22:23   #4
mostec
Member
 
Iscritto dal: Jan 2001
Città: Rimini
Messaggi: 197
in effetti per questo genere di lavori la soluzione ricorsiva è perfetta e mille volte più pulita ed elegante della soluzione iterativa
__________________
Linux + xBox360 + iPod.
Ognuno al suo posto.
mostec è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2008, 19:15   #5
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
ok grazie per la'iuto . adesso complia eppure dice che tutte le parole sono palindrome

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, stringa parola)
{ int j;
int k;
int i=0;
k = sizeof (parola);
while (k!=i)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}

eppure non mi sembre sbagliato come algoritmo...
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2008, 19:34   #6
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
ok grazie per la'iuto . adesso complia eppure dice che tutte le parole sono palindrome

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, stringa parola)
{ int j;
int k;
int i=0;
k = sizeof (parola);
while (k!=i)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}

eppure non mi sembre sbagliato come algoritmo...


col ricorsivo invece ho provato cosi:


#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali (int a, int m ,stringa parola);



int main () {

stringa parola;
int var1=0;
int var2;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1,var2, parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, int m ,stringa parola)
{ int j;
int k = sizeof (parola);
m = k;
while (m!=a)
{if (parola[a] == parola[m]) j=1;
else j=0;}
return j;
int pali(int a++, int m-- , stringa parola);
}
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 04:52   #7
mostec
Member
 
Iscritto dal: Jan 2001
Città: Rimini
Messaggi: 197
è molto confusionaria la tua soluzione inoltre dubito vada...
te ne posto una ricorsiva che ho fatto al volo che a parte scherzi strani dovrebbe essere perfetta.

Codice:
int pali(int begin, int end, char* word){

	int res = 1;	
	if ((begin != end) && (begin+1 != end)){
		res = pali(begin+1,end-1, word); //RICORSIONE FINCHé NON ARRIVA AL CENTRO DELLA PAROLA
	}
	if (res == 0) //CONTROLLA CHE LA RICORSIONE PRECENDENTE NON ABBIA DATO ESITO NEGATIVO
		return 0;	
	if (word[begin] == word[end]) //CONFRONTA LE LETTERE
		return 1;
	else 
		return 0;
}
__________________
Linux + xBox360 + iPod.
Ognuno al suo posto.

Ultima modifica di mostec : 12-01-2008 alle 04:54.
mostec è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 12:40   #8
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
a me la tua funzione non funziona... dopo che digito la parola non mi dice se è palindroma o meno (grazie per l'aiuto)
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 14:57   #9
mostec
Member
 
Iscritto dal: Jan 2001
Città: Rimini
Messaggi: 197
Codice:
#include <stdio.h>
int pali(int begin, int end, char* word){
	int res = 1;	
	if ((begin != end) && (begin+1 != end)){
		res = pali(begin+1,end-1, word);
	}
	if (res == 0)
		return 0;	
	if (word[begin] == word[end])
		return 1;
	else 
		return 0;
}
int main(int argc, char* argv[]){

	printf("%d",pali(0,3,"anna"));  //STAMPA 1
	printf("%d",pali(0,4,"anena")); //STAMPA 1
	printf("%d",pali(0,3,"ania"));  //STAMPA 0
	printf("%d",pali(0,4,"aneni")); //STAMPA 0
	return 0;

}
perchè non ti funzionerebbe?
__________________
Linux + xBox360 + iPod.
Ognuno al suo posto.
mostec è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 15:27   #10
carter100
Senior Member
 
Iscritto dal: Jul 2007
Messaggi: 1159
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
ok grazie per la'iuto . adesso complia eppure dice che tutte le parole sono palindrome

while (k!=i)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}

eppure non mi sembre sbagliato come algoritmo...
Da una veloce lettura l'errore è qui. Esci da quel ciclo solo quando i=k, quindi parola[i] sarà uguale a parola[k] e ti verrà ridato j=1 e quindi tutte le parole saranno palindrome. Puoi risolvere cambiando la condizione del while, ad esempio while (k!=i && j==1)
carter100 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 17:03   #11
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
AArgh anche cosi continua a non funzionare!!!

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j=1) printf ("è palindroma");
else ("non lo è..");

}

int pali (int a, stringa parola)
{ int j;
int k;
int i=0;
k = sizeof (parola);
while (k!=i && j==1)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 19:27   #12
carter100
Senior Member
 
Iscritto dal: Jul 2007
Messaggi: 1159
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
AArgh anche cosi continua a non funzionare!!!

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j=1) printf ("è palindroma");
else ("non lo è.."); //MANCA UNA PRINTF

}

int pali (int a, stringa parola)
{ int j;
int k;
int i=0;
k = sizeof (parola); //SIZEOF???USA STRLEN
while (k!=i && j==1) //metti k>i
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}
Ovvio che non funziona. Controlla i miei commenti, inoltre dopo la strlen k va decrementato di 1 altrimenti punta al carattere di fine stringa /0. Poi la variabile j nella funzione non è inizializzata. Infine la funzione prende un parametro che non fa nulla.
carter100 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 12:11   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Io lo farei così:
Codice:
int palindroma_ricorsiva(char *inizio, char *fine)
{
    if(inizio >= fine)
      return 1;

   if(*inizio == *fine)
      return palindroma_ricorsiva(inizio + 1, fine - 1);

   return 0;
}


int palindroma(char *parola)
{
    return palindroma_ricorsiva(parola, parola + strlen(parola) -1);
}
In versione iterativa:
Codice:
int palindroma(char *inizio)
{
   char *fine = inizio + strlen(inizio) - 1;
  
   while(inizio < fine)
   {
      if(*inizio != *fine)
        return 0;
      inizio++;
      fine--;
   }
   return 1;
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 12:18   #14
maze
Junior Member
 
Iscritto dal: Sep 2006
Messaggi: 19
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
AArgh anche cosi continua a non funzionare!!!

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(int a,stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(var1, parola);

if (j==1)
Son l'unico che pensa manchi pure un uguale? Oo
maze è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 12:20   #15
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
io la farei così

Codice:
void palind (char *parola) {

int lstr = strlen(parola);
int cont=0;

int i, j;

for (i=0; i<(lstr/2); i++) {
   j=lstr-i-1;
   if (parola[i]==parola[j]) {
      cont++;
   }
}

if (cont==(lstr/2)) {
   printf("Palindroma");
} else {
   printf("Non Palindroma");
}

}

Ultima modifica di nico88desmo : 13-01-2008 alle 12:30.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 13:34   #16
carter100
Senior Member
 
Iscritto dal: Jul 2007
Messaggi: 1159
Quote:
Originariamente inviato da maze Guarda i messaggi
Son l'unico che pensa manchi pure un uguale? Oo
Si, ho saltato di dire che mancava anche ==
carter100 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 17:57   #17
pietrone86
Member
 
Iscritto dal: Dec 2004
Messaggi: 265
Adesso mi dice che tutte le parole non sono palindrome...

#include <stdio.h>
#include <string.h>

typedef char stringa[10];
int pali(stringa parola);



int main () {

stringa parola;
int var1=0;
printf ("Inserisci parola");
scanf ("%s", parola);
int j;
j = pali(parola);

if (j==1) printf ("è palindroma");
else printf ("non lo è..");

}

int pali (stringa parola)
{ int j=0;
int k;
int i=0;
k = strlen (parola);
k--;
while (k>i && j==1)
{if (parola[i] == parola[k]) j=1;
else j=0;
i++;
k--;}
return j;
}

Ultima modifica di pietrone86 : 13-01-2008 alle 17:59.
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 19:22   #18
carter100
Senior Member
 
Iscritto dal: Jul 2007
Messaggi: 1159
Ma il codice lo rileggi?Nel ciclo while non entrerai mai...hai sbagliato l'inizializzazione della j
carter100 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 22:17   #19
Furla
Senior Member
 
Iscritto dal: Feb 2004
Messaggi: 1454
Codice:
bool paliter(char* inizio, char* fine)
{
 while(*inizio++==*fine--);
 return --inizio>fine;
}

bool palrec(char* inizio, char* fine)
{
 return inizio>=fine?1:(*inizio==*fine)?pali(inizio+1,fine+1):0;
}

Ultima modifica di Furla : 13-01-2008 alle 22:48.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2008, 09:32   #20
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da pietrone86 Guarda i messaggi
Adesso mi dice che tutte le parole non sono palindrome...
Consiglio spassionato... pigliati il codice di cionci, provalo e poi studiatelo un attimo per capirlo: ci sono entrambe le versioni e il codice è pulito, semplice ed elegante.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
Motorola Edge 70 Neo in arrivo, un leak ...
Apple rilascia iOS 27.2 e iPadOS 27.2: n...
Ondata di licenziamenti in casa PlayStat...
macOS 27.2 Golden Gate è disponib...
Fujifilm vuole quintuplicare la produzio...
ChatGPT ora legge email e calendario di ...
Canon, un brevetto descrive un 70-200mm ...
La volante della polizia adesso... vola:...
SK hynix supera i 100.000 miliardi di wo...
Surface Laptop Ultra ha 1.344 zone di lo...
TOP 10 offerte Amazon in 2 minuti: 3 sup...
Mythos 5 ha creato identità false per fa...
Google DeepMind presenta Genie 4, il mod...
Beats Studio Pro a 179€ in 3 colori, sup...
Oracle affida agli agenti di IA l'implem...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:56.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v