Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] Verifica esercizio svolto

    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.

    codice:
    #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;
    }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    leggi prima il regolamento...

  3. #3
    ora va bene???

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ora si.. cmq che problemi ti da? compila? esegue male?

  5. #5
    Allora, ho seguito un'altra strada e sono arrivato a fare questo svolgimento

    codice:
    #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???

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.