IndicePortaleCalendarioFAQCercaLista UtentiGruppiRegistratiAccedi
Social

Cerca
 
 

Risultati per:
 
Rechercher Ricerca avanzata
Visite
My Biblioteca
Leggi Qui Tutti I Libri

BASTA UN CLICK
Ultimi argomenti
»  LinuxMX blog & forum: una comunità tutta Linux
Ven Giu 15, 2012 9:00 pm Da niculinux

» Le Funzioni
Dom Mar 18, 2012 12:07 am Da Mira

» Gestione permessi di un file
Gio Mar 15, 2012 12:49 pm Da Mira

» Comando per creare un link simbolico
Mer Mar 14, 2012 11:08 pm Da Mira

» Comandi per eliminare file e cartelle
Mer Mar 14, 2012 3:29 pm Da Mira

» Comandi per rinominare un file
Dom Mar 04, 2012 12:41 pm Da Mira

» Le variabili (parte 2)
Sab Mar 03, 2012 4:24 pm Da Mira

» Le variabili (parte 1)
Lun Feb 27, 2012 11:32 pm Da Mira

» Introduzione al C...
Lun Feb 27, 2012 1:37 pm Da Mira

Argomenti più visti
Regolamento del forum
Problema aggiornamento ubuntu 11.04 a 11.10
Tablet android quale comprare o quale scegliere
VirtualBox 4.1.4 DOWNLOAD FREE
LinuxMX blog & forum: una comunità tutta Linux
openSUSE 12.1 Beta 1 DOWNLOAD FREE
Libre Office o Open Office?
Ciao a tutti voi
Le variabili (parte 1)
Introduzione al C...
Volunia
Pagina Facebook
Parole chiave

Condividi | 
 

 Programma in C che acquisisce una parola e la stampa solo e solo se palindroma

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso 
AutoreMessaggio
florin88

avatar

Messaggi : 334
Data d'iscrizione : 21.09.11
Età : 30
Località : tutto il mondo

MessaggioTitolo: Programma in C che acquisisce una parola e la stampa solo e solo se palindroma    Sab Ott 15, 2011 12:07 am



Vediamo di metterci a scrivere un programma in linaguaggio C che acquisisce una parola inserita dalla tastiera (definita in questo caso come stringa di caratteri senza lo spazio) e la stampa se e solo se questa parola è palindroma. Per farmi capire da chi non conosce bene largomento: sono quelle parole che non importa se si legono da sinistra o da destra hanno come significato la stessa cosa => LE-TA-LE MA-RE-MA NE-RO-NE.

In questo problema per determinare la lunghezza della parola si utilizzerà la funzione strlen(s) contenuta nel file header <string.h>.

Vediamo la Soluzione.

SOLUZIONE SBAGLIATA:
Codice:

#include <studio.h>
#include <string.h>

void main ()
{

      char a[100];
      int i, flag;

      i  = 0;
      scanf ("%a", a);
      flag = 1;
 
      while ((i < (strlen(a)/2)) && (flag == 1))  {

                if (a[i] != a[strlen(a)-i-1])    {
                 
                  flag = 0;
              }
          i++;
      }

      if (flag == 1)  {
                printf ("La parola da te scelta e' PALINDROMA. \n");
      } else {
                printf ("La parola da te scelta NON E' PALINDROMA. \n");
      }
return 0;
}



SOLUZIONE CORRETTA
Codice:


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

#define MAX_BUFFER 512

int main (int argc, char *argv[])
{
 char a[MAX_BUFFER]={0};
 int i, flag, len; i = flag = len = 0;
 
 if ( argc == 2 ) {
  if ( strlen(argv[1]) > MAX_BUFFER ) {
    printf("Parola inserita maggiore del buffer consentito di %d caratteri\n",MAX_BUFFER);
    return 1;
  }
  sprintf(a,"%s",argv[1]);
 }
 else {
  printf("Inserisci parola > ");
  scanf ("%s", a);
 }
 flag = 1;
 len = strlen(a);
 for ( i=0; i < len/2; i++ ){
  if ( a[i] != a[len-i-1] ) {
        flag = 0;
  break;
  }
 }

 if (flag == 1)  {
                printf ("La parola da te scelta e' PALINDROMA. \n");
 } else {
                printf ("La parola da te scelta NON E' PALINDROMA. \n");
                return 1;
 }
 return 0;
}


Analizzare bene il codice prima di metterlo in pratica, scriverlo su un foglio e poi scriverlo nel vostro editor e compilarlo. Wink
Consiglio per i novizi Wink

programmazione


seguire la spiegazione sottostante, a cura di gulpe


Ultima modifica di florin88 il Lun Nov 21, 2011 3:21 pm, modificato 1 volta
Torna in alto Andare in basso
Visualizza il profilo dell'utente http://www.lascaricata.forumattivo.com
fuoco992



Messaggi : 108
Data d'iscrizione : 27.09.11

MessaggioTitolo: Re: Programma in C che acquisisce una parola e la stampa solo e solo se palindroma    Mar Ott 25, 2011 5:42 pm

e se la parola fosse di 102 lettere XDDDDDDDDDD
Laughing
Torna in alto Andare in basso
Visualizza il profilo dell'utente
florin88

avatar

Messaggi : 334
Data d'iscrizione : 21.09.11
Età : 30
Località : tutto il mondo

MessaggioTitolo: Re: Programma in C che acquisisce una parola e la stampa solo e solo se palindroma    Mar Ott 25, 2011 5:44 pm

=)) =)) =))

con questa sorgente così va in crash error 404


=)) =)) =))

basta cambiare char a[100] con char a[102]
Torna in alto Andare in basso
Visualizza il profilo dell'utente http://www.lascaricata.forumattivo.com
gulpe



Messaggi : 2
Data d'iscrizione : 21.11.11

MessaggioTitolo: Re: Programma in C che acquisisce una parola e la stampa solo e solo se palindroma    Lun Nov 21, 2011 2:55 pm

Non posso che commentare anche questo codice.

1) "stdio.h" non "studio.h"
2) "int main" non "void main" - Se dichiari void main, come puoi ritornare 0?
3) buona cosa inizializzare sempre le variabili all'atto della dichiarazione

char a[100]={0}; --> non char a[100];
int i, flag; i = flag = 0; --> non int i,flag

Infatti se vedi nel tuo codice ti sei dimenticato di inizializzare "i". Quel while non potrà mai funzionare correttamente.

3) Puoi terminare il ciclo while non appena ti accorgi che una parola non è palindroma. Questo ti permette di risparmiare inutili cicli di CPU.
Visto che devi mantenere un contatore è forse più sensato usare un for invece che un while

4) cosa è il carattere di formattazione %a ? una stringa essendo un char * si prende con %s
scanf("%s",a); --> non scanf("%a",a);

5) Per rendere il codice più carino potresti anche prendere la parola da cmqline del tipo ./mioprogramma parola-da-testare

codice corretto:


Codice:

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

#define MAX_BUFFER 512

int main (int argc, char *argv[])
{
 char a[MAX_BUFFER]={0};
 int i, flag, len; i = flag = len = 0;
 
 if ( argc == 2 ) {
  if ( strlen(argv[1]) > MAX_BUFFER ) {
    printf("Parola inserita maggiore del buffer consentito di %d caratteri\n",MAX_BUFFER);
    return 1;
  }
  sprintf(a,"%s",argv[1]);
 }
 else {
  printf("Inserisci parola > ");
  scanf ("%s", a);
 }
 flag = 1;
 len = strlen(a);
 for ( i=0; i < len/2; i++ ){
  if ( a[i] != a[len-i-1] ) {
        flag = 0;
   break;
  }
 }

 if (flag == 1)  {
                printf ("La parola da te scelta e' PALINDROMA. \n");
 } else {
                printf ("La parola da te scelta NON E' PALINDROMA. \n");
                return 1;
 }
 return 0;
}
Torna in alto Andare in basso
Visualizza il profilo dell'utente
Contenuto sponsorizzato




MessaggioTitolo: Re: Programma in C che acquisisce una parola e la stampa solo e solo se palindroma    

Torna in alto Andare in basso
 

Programma in C che acquisisce una parola e la stampa solo e solo se palindroma

Vedere l'argomento precedente Vedere l'argomento seguente Torna in alto 

 Argomenti simili

-
» Che cos'è una versione portatile (portable) di un programma
» Programma per generare numeri casuali - Random Number Generator
» Programma per montare video gratuitamente come Pinnacle Studio?
» Estrattore per creare mod su Euro Truck Simulator 2
» Risolvere scomposizione di polinomi facilmente online - YouMath
Pagina 1 di 1

Permessi di questa sezione del forum:Non puoi rispondere agli argomenti in questo forum
My Informatica :: Programmazione a 360° :: Tutto C, C++, C# e Objective-C :: Esempi e Sorgenti-