File input ambiguo

di Anonimizzato24584 il
40 risposte

40 Risposte - Pagina 2

  • È un esercizio troppo difficile per me consiglio di fare a casaccio
  • 
    	string StringCopy(string x){
    		string aux=""; //x è la stringa in cui ho la parola
    		for(int i=0; i<x,length(); i+=2){
    			aux+=x[i];
    		}
    		return aux;
    	}
    
  • È un esercizio troppo difficile per me consiglio di fare a casaccio
  • Non so perche avevo pensato che ogni carattere avesse uno spazio ahah
    
    	String StringCopy(string x){
          		string aux=""; //x è la stringa in cui ho la parola
          		for(int i=0; i<x,length(); i++){
            		if(x[i]!=' ')
                			aux+=x[i];
          		}
          		return aux;
       	}
       
  • Adesso fai mangiacifreintesta
    Data una stringa fai un ciclo (un while) che in output ritorna le cifre 1..9, il punto,la virgola.
    si arresta quando finisce la stringa o trova un qualsiasi altro carattere. Ritorna anche la parte rimanente.
    In sostanza vuoi spezzare la stringa in due parti (automino)

    Input '25.8(9)+(x)' output '25.8' e '(9)+(x)'

    Input '(6)' output '' e '(6)'
    Attenzione che ti servirà un secondo p arametro di output che passerai per riferimento.
    chiamalo ad esempio o_resto
    Lo ripeto : la funzione ha Due output, non uno

    Ps la funzione di prima chiamala trimmaspazi
  • 
    	string Mangia_Cifre_in_Testa(string x, string &back){
    		int i=0;
    		back="";
    		string torna="";
    		while(i<x.length() && x[i]!='(' || x[i]|=')' || x[i]!='+ || x[i]!='x')
    			torna+=x[i++];
    		while(i<x.length())
    			back+=x[i++];
    	}
    
  • È un esercizio troppo difficile per me consiglio di fare a casaccio
  • Vediamo, torna dovrebbe essere la stringa da ritornare solo che con la fretta ho scordato la return.
    le condizioni del ciclo le ho adattate all'input, altrimenti farei qualcosa del tipo:
    while(i<x.length() && ((x>=48 && x<=57) || x=='.' || x==','))
  • È un esercizio troppo difficile per me consiglio di fare a casaccio
  • 
    	String Mangia_Cifre_in_Testa(string x, string &back){
          		int i=0;
         	 	back="";
          		string torna="";
          		while(i<x.length() && ((x[i]>=48 && x[i]<=57) || x[i]=='.' || x[i]==','))
          			torna+=x[i++];
          		while(i<x.length())
             		back+=x[i++];
    		return torna;  
       }
       
  • È un esercizio troppo difficile per me consiglio di fare a casaccio
  • È un esercizio troppo difficile per me consiglio di fare a casaccio
  • +m2+ ha scritto:


    Gettato la spugna?
    Sicuramente non gliela stai rendendo facile, considerando anche qual è la traccia dell'esercizio!

    +m2+ ha scritto:


    Non devi adattare niente, devi solo fare quello che dico.
    Inoltre non mi sembra il massimo come approccio (e non intendo per i modi, ma per il fatto di costringerlo a fare cose senza che lui abbia chiaro qual sia l'algoritmo complessivo), ma è una mia modesta opinione.


    Provo a darti anche io un input, se ti convince seguilo, altrimenti ignoralo.
    Lasciamo perdere per il momento i polinomi e concentriamoci sul singolo monomio; esso avrà una struttura del genere:

    segno(facoltativo) / intero che rappresenta il coefficiente(facoltativo) / variabile(facoltativa) / elevazione a potenza(facoltativa) / intero che rappresenta il grado (facoltativo)

    Ipotizziamo di scorrere dall'inizio alla fine la stringa che costituisce il monomio, quello che ci interessa alla fine del ciclo è di conoscere il coefficiente e il grado del monomio. Per farlo dichiariamo due variabili intere: coeff inizializzata a 1 e grad inizializzata a 0. Dichiariamo anche una variabile booleana flag inizializzato a false.
    Iniziamo quindi a scorrere la stringa:
    - se il primo carattere è + passiamo avanti, se è - prima di andare avanti modifichiamo coeff a -1;
    - scorreremo quindi il resto della stringa e se troviamo una cifra salveremo queste cifre consecutive in un vettore, se invece il carattere non è una cifra (quindi sarà o la variabile o l'elevazione a potenza) imposteremo flag a true e grad a 1 (poichè il monomio sicuramente non sarà di grado 0);
    - se il suddetto vettore ha dimensione non nulla, convertiremo il suo contenuto in un intero n(per esempio il vettore 3 9 1 diventa l'intero 391); quindi se flag=false sarà coeff*=n, se flag=true sarà grad=n.

    Riprendiamo ora la somma dei polinomi. Visto che il loro grado è massimo 20, dichiareremo un array p di 20 interi inizializzato a 0. Nel momento in cui a valle della precedente procedura conosceremo il coefficiente e il grado del generico monomio, basterà fare p[grad]+=coeff.
  • È un esercizio troppo difficile per me consiglio di fare a casaccio
  • Non dici cose sbagliate, ma secondo me spesso sono abbastanza fuori contesto.
    Coi quali costruirà prendipolinomiostrano (perché è un modo strano, ma vabbè).
    La traccia non è poi così strana, invece l'input che hai postato in precedenza, ossia 25.8(9)+(x), lo è abbastanza.
    6) se si preferisce andare allo 'sbaraglio' tanto meglio, ma lo scopo è (4), non fare un programma didattico
    Dalla piega surreale che aveva preso la discussione non mi sembra che fantasia stesse imparando qualcosa sul modo di ragionare e di risolvere un problema, ma si è solo limitato a (cercare di) seguire le tue istruzioni senza avere alcuna idea di dove si volesse andare a parare.
Devi accedere o registrarti per scrivere nel forum
40 risposte