PDA

Visualizza la versione completa : [C++] Esercizio con lettura di vettori e output errato


peppebozzo
10-09-2009, 15:53
Mi controllate questo esercizio se è corretto???

Si realizzi un programma che effettua le seguenti operazioni:

1) Legge (un carattere alla volta) una sequenza di parole, separate dal simbolo ‘+’, memorizzandole nel vettore di caratteri v e separandole con ‘\0’. Si assuma che anche la prima parola sia preceduta dal simbolo ‘+’ e che ogni parola sia composta solo da lettere o cifre, per cui non si devono memorizzare in v altri caratteri o spazi intermedi digitati dall’utente.
Crea inoltre un vettore di puntatori chiamato vp, il cui elemento i-esimo punta alla parola i-esima memorizzata nel vettore v. Per esempio, nel caso in cui la sequenza in input sia “x +m 1+ m2+m_23\n" v=[m1\0m2\0m23\0…].
Si assuma che la sequenza in input termini con l’inserimento di ‘\n’, che il numero massimo di parole sia 80, mentre il numero massimo di caratteri inseriti dall’utente sia 1000. Si creino a tale scopo i simboli di costante MAX_P e MAX_C.
a) Si mostri l’automa a stati finiti che modella tale scenario.
b) Si crei la funzione leggi che riceve in input i vettori v e vp come parametri e restituisce il numero di parole lette.



#include "stdafx.h"
#include <iostream>
#define MaxC 1000;
#define MaxP 80;
#define Parola 1;
#define Altro 0;

char * cerca(int c, char v[], char * vp[]);

int main(int argc, char* argv[])
{
printf("Esame\n");
char c;
char V[1000];
char *Vp[80];
int State;
int i=0;
int parole=0;
while (c=getchar()!='\n')
{
switch (State){
case 1:
if (c=='+')
{
Vp[parole] = &V[i+1];
V[i]='\0';
i++;
parole++;
}
if(!((c>='a'&&c<='z')||(c>='A'&&c<='Z'))||c!='+')
{
State=0;
break;
}
V[i]=c;
i++;
break;
case 0:
if (c=='+')
{
Vp[parole] = &V[i+1];
V[i]='\0';
i++;
parole++;
}
if ((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{
V[i]=c;
i++;
State=1;
}
break;
}
}
system("Pause");
return 0;
}

Stoicenko
10-09-2009, 15:59
leggi prima il regolamento... :dhò: :dhò: :dhò: :dhò: :dhò:

peppebozzo
10-09-2009, 16:04
ora va bene???

Stoicenko
10-09-2009, 16:38
ora si.. cmq che problemi ti da? compila? esegue male?

peppebozzo
13-09-2009, 15:20
Allora, ho seguito un'altra strada e sono arrivato a fare questo svolgimento



#include <iostream>
#include <cstdlib>
#define MaxC 1000
#define MaxP 80
using namespace std;

void leggi(char v [], char* vp [], int &nC, int &nP);
char * cerca(int c, char v[], char * vp[]);
void stampa(char s);

int main(int argc, char* argv[])
{
char v[MaxC];
char *vp[MaxP];
char c;
int nC = MaxC; int nP = MaxP;

leggi(v, vp, nC, nP);

for (int j=0; j<nC; j++)
{
//stampa(v[j]);
printf("%d", v[j]);
}
char *cerca(int c, char v[], char * vp[]);
system("Pause");
return 0;
}

void leggi(char v [], char* vp [], int &nC, int &nP)
{
char c;
nC=0;
nP=0;
int inizioParola=0;
while ((c=getchar())!='+' )//Salto tutto fino alla prima parola
while ((c=getchar())!='\n' )
{
if( (c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='1'))
{
v[nC]=c;
nC++;
}
else if(c=='+')
{
v[nC]='\0';
nC++;
vp[nP]=&v[inizioParola];
nP++;
inizioParola=nC+1;
}

}
vp[nP]=&v[inizioParola];
nP++;
}

char *cerca(int c, char v[], char * vp[])
{
int k=0;
for (int i=0; i<MaxP; i++)
{
if(v[i] != c)
{
i++;
k++;
}
else return vp[k];
}
}


ma l'output non è quello giusto. Dove sbaglio???

Loading