PDA

Visualizza la versione completa : [C] Inserimento di caratteri ASCII e loro verifica


trek
29-04-2007, 19:00
Realizzare un'applicativo che consenta di inserire nome e cognome in un vettore di 30 elementi. Controllando che i valori inseriti siano ammessi (sono ammessi solo lettere e uno spazio per dividere il nome dal cognome).
Il nome e il cognome inoltre devono incominciare con una lettera maiuscola terminando con un punto. Gestire eventuali errori( es. se si inseriscono dei numeri o delle lettere maiuscole che non sono le iniziali del nome e/o del cognome. Il programma dovra restituire tutti i caratteri maiuscoli.

Questo e ciò che mi è stato dato. Qualche idea??!!



char v[30];

char visualizza();
{
char nominativo;
int i;
scrivi("inserisci il nome con la prima lettera maiuscola e il cognome con la prima lettera maiuscola e separati da uno spazio");

for (i=0; i<30; i++)
{
v[i]=getche();
scrivi("%c" v[i]);
}
}


int controllo ();
bool continua;
int lungnome,lungcogn;

if (65 <= v[0] <=90)
{
Continua=vero
Else
{
Scrivi (“il nome deve cominciare con una lettera maiuscola”);

if 97<v[1] || v[lungnome]<=122
{
Continua=vero
}
Else
scrivi(“devi inserire lettere maiscuole”);
if v[lungnome+1]=32
{
Continua=vero
}
Else
{
Printf(“tra il nome e il cognome ci deve essere uno spazio”)
}
If 65 <= v[lungnome+2]<=90
{
Continua=vero
}

Else
{
Scrivi(“il cognome deve cominciare con una lettera maiuscola”);
}

Scrivi(“inserisci la lunghezza del nome”)
Leggi (lungnome)

If 97 <=v[lungnome+3] || v[lungnome+lungnome+1]<=122
{
Continua= vero
}
Else
{
Scrivi “le altre lettere del cognome devono essere maiuscole”)
}


Questa è una speudocodifica ( manca il main e la procedura che restituisca tutte le lettere minuscole), mi è stato detto che non va bene!! Non ho proprio altre idee!!
Il programma dovrei farlo in C; ho cercato programmi simili in rete ma non ho trovato niente che mi servisse!!
:dhò: :dhò:
Spero di essere stato abbastanza chiaro per avere un grande aiuto dai forumisti di questo forum che hanno cercato sempre di aiutarmi!
grazie ciao!!!!!


:ciauz: :ciauz:

MItaly
29-04-2007, 22:27
Puoi fare molto prima usando per bene le funzioni di stringa della libreria string.h e la potente scanf (spesso sottoutilizzata):


#include <stdio.h>
#include <string.h>
int isstrlower(char * str);
int main(int argc, char * argv[])
{
char nominativo[31];
char * spazio;
char * strpnt;
char punto[2];
if(scanf("%30[A-Za-z ]%1[.]", nominativo, punto) != 2)
{
printf("Il nominativo non deve contenere simboli e deve terminare con un punto.");
return 1;
}
if(!(spazio = strchr(nominativo, ' ')))
{
printf("Nome e cognome devono essere separati da uno spazio.");
return 2;
}
*spazio = 0;
if(!isstrlower(nominativo + 1) || !isstrlower(spazio + 2))
{
printf("Il nominativo non può contenere più di uno spazio o altre lettere maiuscole oltre alle iniziali di nome e cognome.");
return 4;
}
if(!isupper(*nominativo) || !isupper(*(spazio + 1)))
{
printf("Nome e cognome devono avere la lettera maiuscola.");
return 3;
}
printf("Ok!");
return 0;
}
/* Restituisce 0 se la stringa contiene caratteri diversi da lettere maiuscole */
int isstrlower(char * str)
{
int sl = strlen(str);
char * sp;
for(sp = str; sp < str + sl; sp++)
if(!islower(*sp)) return 0;
return 1;
}.

trek
30-04-2007, 05:52
grazie mille mitaly domani mattina quando sarò più lucido provero!

trek
02-05-2007, 16:26
Ciao a tutti,
avevo un piccolo problema con questo programma.
Il compilatore non mi da errori di sintassi ma una volta scritto il nome e il cognome separati da uno spazio il programma termina; invece di restituire le lettere tutte maiuscole! Qualcuno saprebbe indicarmi il perchè?!



//Avendo un vettore di 30.Introdurre in input nome e cognome (con spazio che divide i due e l'introduzione dei dati deve finere con
// un punto)le prime lettere del nome e del cognome devono essere scritte in maiuscolo, realizzare un aplicativo che mi
// trasformi tutti i caratteri in maiuscolo.//

#include<stdio.h>
#include<stdlib.h>

char vett[30];
char nome;
int i,x,y,n;

void caricamento()
{
do{
printf("Scrivi nome e cognome.");
scanf("%c",vett[i]);
if (vett[0]<97)
printf("La prima lettera del nome deve essere maiuscola");
y=1;
if(vett[i]=32)
x=i;
if(vett[x+1]<97)
printf("La prima lettera del cognome deve essere maiuscola");
y=1;
i++;
n++;
}while(vett[i]!=46 && y!=1);
}
void codifica()
{
for(i=1;i<x;i++)
{
vett[i]=vett[i]-32;
}
for(i=x+3;i<n-1;i++)
{
vett[i]=vett[i]-32;
}

}
void stampa()
{
printf("Il nome e il cognome in maiuscolo e': %c",vett[i]);
}
int main()
{
printf("NOME & COGNOME \n \n \n");
caricamento();
codifica();
stampa();
system("PAUSE");
}

Grazie del vostro aiuto!!!!!!!!
:ciauz: :ciauz:

oregon
02-05-2007, 16:49
Rivedi la funzione caricamento ...

Qualche indizio ...

1) La variabile i non e' inizializzata ... ricorda che se non l'hai mai usato, non e' detto che sia uguale a 0 ...

2) Se scrivi vett[i]=32 non stai facendo un confronto ma un'assegnazione ... il confronto si fa con ==

3) Controlla i valori degli indici e la funzionalita' delle if all'interno del ciclo ...

trek
02-05-2007, 16:54
Non saprei come fare senza della gente come te!!!!! grazie Oregon ora me lo vedo!
"La variabile i non e' inizializzata ... ricorda che se non l'hai mai usato, non e' detto che sia uguale a 0 .." :zizi: Si imparano sempre cose nuove da voi!!!!!

trek
02-05-2007, 16:56
Ciao a tutti,
dovrei realizzare un programma che richieda da tastiera 20 caratteri e li memorizzi
all interno di un vettore e ai valori decimali corrispondenti ai caratteri
inseriti va aggiunto il valore della propria data di nascita(solo il giorno) e stampi a video i
carattei risultanti dovrà inoltre richiedere al giocatore il valore che codifica
la frase;e conti le vocali nella frase inserita.
Qualche idea?? Dovrei rivoluzionare questo programma (che è pieni di errori ed non è completo)?
Sapreste inoltre indicarmi qualche programma simile?? Perchè io da questo non so come muovermi.





#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
//unsigned char i;\\i valori da 0 a 255
int i;
char ch,parola[20];//per mostrare il corrispondente ascii
i=0
do
{
printf("\n Inserisci la parola di massimo 20 lettere")
scanf("%c",& parola)
parola[i]=getch();
i++;
conta++;
}
while(parola[i-1]>='A' && parola)
system("pause")
for (i=0;i<conta;i++)
{
printf("\n VALORE Decimale %d" ,i);
ch=i;
printf("\n VALORE corrispondente alla tabella ascii %c",ch);
}
system("PAUSE");
}

:ciauz: :ciauz: Grazie!!!!!!!!

MItaly
02-05-2007, 17:13
Ma non è lo stesso programma di questa (http://forum.html.it/forum/showthread.php?s=&threadid=1117468) discussione? Si poteva andare avanti a parlarne lì...

ivangarigli
02-05-2007, 17:29
L'errore sta nello scanf, questa funzione deve prendere l'intero vettore non una parte. :)

Xaratroom
02-05-2007, 19:55
Più che programma la chiamerei bozza ...
Vuoi quindi addizionare ai codici ascii un valore da inserire in un vettore di interi ?

int v[20];
char stringa [20];
short int valore;
[...]
for (i = 0; i < 20; i++)
v[i] = stringa[i] + valore;


EDIT: Per le vocali :
int vocali = 0;
for (i = 0; i< 20; i++)
if (Vocale (stringa[i]))
vocali++;

int Vocale (char carattere)
{
if (carattere | 0x20 == 'a')
return 1;
if (carattere | 0x20 == 'e')
return 2;
if (carattere | 0x20 == 'i')
return 3;
if (carattere | 0x20 == 'o')
return 4;
if (carattere | 0x20 == 'u')
return 5;
return 0;
}

Loading