Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Numeri da record, Xiaomi distribuisce ol...
BitLocker accelerato via hardware: Micro...
Blue Origin prosegue lo sviluppo dei lan...
Moore Threads: nuove GPU 15 volte pi&ugr...
Steam diventa esclusivamente 64-bit: Val...
La Corte Suprema restituisce a Elon Musk...
X lancia Creator Studio su mobile: nuovi...
Dieci anni fa SpaceX fece atterrare per ...
POCO M8 e M8 Pro arriveranno nel 2026: e...
Caos Formula 1: il motore Mercedes &egra...
Tariffe nazionali per le chiamate e gli ...
Tassa chilometrica non solo per elettric...
FSR 4 su Radeon RX 5000, 6000 e 7000? Li...
Quanti alberi ci sono in Skyrim? In The ...
Pocket Max, la nuova console Mangmi punt...
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: 17:25.


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