Cobol :cry:

di il
1 risposte

Cobol :cry:

Salve a tutti!
(Sarà la sezione giusta? )
Purtroppo mi sto scontrando con cobol per scelta (altrui, un po' come con le donne)

Nel mio esercitarmi sto svolgendo un piccolo esercizio:
voglio creare una stringa piena di valori "#" a seconda del numero inserito dall'utente
(per il momento nn ha senso, per lo sviluppo che devo dargli ne avrà)

per minimizzare posto il codice interessato:

 WORKING-STORAGE SECTION.
01 STRINGA.
	02 PAROLA PIC X OCCURS 20 TIMES.
01  LATO PIC 99.
01  A PIC 99.
01  B PIC 99.


PROCEDURE DIVISION.

MAIN.
	DISPLAY "INSERISCI LATO".
	ACCEPT LATO.

	COMPUTE B = LATO.

	PERFORM SUPERIORE UNTIL B > 0.
	DISPLAY STRINGA.
	

	STOP RUN.

SUPERIORE.
	COMPUTE PAROLA(B)="#".
	COMPUTE B = B - 1. 
ok, nn mi funziona. dal momento che mi è nato il dubbio ho provato allora
ENVIRONMENT DIVISION.
*
DATA DIVISION.


 WORKING-STORAGE SECTION.
01 STRINGA.
	02 PAROLA PIC X OCCURS 20 TIMES.

	COMPUTE PAROLA(1) = "A".	
	COMPUTE PAROLA(2) = "B".
	COMPUTE PAROLA(3) = "C".
	DISPLAY STRINGA.
risultato di output: 000 (in entrambi)
risultato che speravo: ABC (ovviamente seguendo il secondo esempio)

sto seguendo gli appunti di informatica libera. Dove sto sbagliando?

1 Risposte

  • Re: Cobol :cry:

    La working va bene l'errore stà nel main inquanto l'istruzione compute e' utilizzata per i calcoli matematici.
    poi per inserire i dati in un vettore devi usare il costrutto perform varying thru until
    ti posto la soluzione con qualche commento.
    WORKING-STORAGE SECTION.
    01 STRINGA.
    02 parola pic x(20). ;qui mi definisco la variabile stringa intera alla sua massima capacità
    02 parola-vett redefines parola. ; qui mi creo un vettore di 20 stringhe ogni elemento di 1 carattere cosi da poterlo riempire.
    44 word PIC X OCCURS 20 TIMES.
    01 LATO PIC 99.
    01 A PIC 99. ; variabile di cilo
    01 B PIC 99. ; questa non ti serve occupa solo memoria.

    PROCEDURE DIVISION.

    MAIN.
    move zeros to lato. ; mi azzero le variabili che utilizzero e buona norma sapere sempre che valore hanno le variabili prima dell' utilizzo.
    DISPLAY "INSERISCI LATO".
    ACCEPT LATO.
    ;dopo gli input conviene sempre mettere un controllo di verifica altrimenti potresti incorrere in errori di non facile soluzione.
    if lato < 1 or lato > 20 display "sei esagerato riprova" go to main.
    ; adesso effettuo il ciclo di riempimento della sottostringa
    perform superiore thru fine-superiore varying a from 1 by 1 until a <= lato.
    display parola.
    STOP RUN.

    SUPERIORE.
    move "#" to parola-vet(a).
    fine-superiore.

    spero di esserti stato d'aiuto saluti smalldragon
Devi accedere o registrarti per scrivere nel forum
1 risposte