Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-01-2008, 18: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 18:50.
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2008, 19: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, 19: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, 21: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, 18: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, 18: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, 03: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 03:54.
mostec è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2008, 11: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, 13: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, 14: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, 16: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, 18: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, 11: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, 11: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, 11: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 11:30.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 12: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, 16: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 16:59.
pietrone86 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2008, 18: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, 21: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 21:48.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2008, 08: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


Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
GeForce RTX 3080 raffreddata con un diss...
Proofpoint mette in sicurezza gli agenti...
Annunci falsi su Bakeca con dati veri di...
Attenzione alla truffa dell'assegno di A...
Addio al mito delle batterie a stato sol...
400 milioni e un obiettivo ambizioso: Re...
TCL 2026: la tecnologia SQD-Mini LED arr...
Gli aggiornamenti arriveranno, ma non si...
Monopattini elettrici: addio "Far W...
Mistral AI raccoglie 830 milioni di doll...
Hacker iraniani di Handala violano la Gm...
Chi è Eddie Dalton: il cantante d...
OVHcloud mette l'Italia al centro della ...
Zeekr 007 GT sold out in Cina, si passa ...
Hisense QLED 4K da 98'' e 85'' con 144Hz...
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: 04:08.


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