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

    [fortran 77] idee per un programma?

    premettendo che non è un problema scrivere il codice.. cioè.. non sono un genio.. ma me la cavo abbastanza con le basi acco :P
    devo fare un programmino semplice semplice per l'esame di informatica.. c'è gente che porta un programma per calcolare il volume di un cubo quindi roba semplicissima... solo che non ho idee.. .:P
    consigli?
    Proudly statisticheited bai UTONTER
    Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
    Nella sua dimora di R'lyeh, il morto Cthulhu aspetta sognando

  2. #2

    Re: [fortran 77] idee per un programma?

    mmmh... prima di mettermi a perdere le ore su una cosa impossibile... è fattibile un programmino che concerta decimali in binari e viceversa?
    Proudly statisticheited bai UTONTER
    Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
    Nella sua dimora di R'lyeh, il morto Cthulhu aspetta sognando

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io non conosco il Fortran.
    Però, un'idea potrebbe essere quella di scrivere un programma per la risoluzione dell'equazione di secondo grado ax² + bx + c. Richiedi all'utente i vari coefficienti (a, b e c) e il programma controlla se vi sono soluzioni reali o meno e, nel caso ci siano, le visualizza.

    Da quel poco che ho letto di Fortran dovrebbe essere in grado di gestire anche i numeri complessi... vedi te se far ritornare anche le soluzioni complesse, nel caso di delta < 0.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Originariamente inviato da LeleFT
    Io non conosco il Fortran.
    Però, un'idea potrebbe essere quella di scrivere un programma per la risoluzione dell'equazione di secondo grado ax² + bx + c. Richiedi all'utente i vari coefficienti (a, b e c) e il programma controlla se vi sono soluzioni reali o meno e, nel caso ci siano, le visualizza.

    Da quel poco che ho letto di Fortran dovrebbe essere in grado di gestire anche i numeri complessi... vedi te se far ritornare anche le soluzioni complesse, nel caso di delta < 0.


    Ciao.
    si, ci avevo pensato.. ma è uno degli esempi che ha fatto in classe
    Proudly statisticheited bai UTONTER
    Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
    Nella sua dimora di R'lyeh, il morto Cthulhu aspetta sognando

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Una buona idea è un programma che genera un labirinto e la soluzione, che fattorizza 3 mumeri interi e ne ricava mcm ed MCD o che codifica una stringa.

    Ho altri programmi semplici semplici, ma in altri linguaggi come C++/Java/qbasic/Pascal e altro.

    Se ti servono dovrei avere i sorgenti.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Originariamente inviato da netarrow
    Una buona idea è un programma che genera un labirinto e la soluzione, che fattorizza 3 mumeri interi e ne ricava mcm ed MCD o che codifica una stringa.

    Ho altri programmi semplici semplici, ma in altri linguaggi come C++/Java/qbasic/Pascal e altro.

    Se ti servono dovrei avere i sorgenti.

    hai un pvt
    Proudly statisticheited bai UTONTER
    Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
    Nella sua dimora di R'lyeh, il morto Cthulhu aspetta sognando

  7. #7
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Un'idea potrebbe essere quella di mettere in evidenza tutte le capacità del Fortran ovvero quelle del calcolo matematico....io penserei ad un programma che lavori con matrici, che so ad esempio per la risoluzione di un sistema 3x3 con input preso da file.
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  8. #8
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ho ripescato i sorgenti in C++ per:
    Fattorizzare 3 numeri interi e trovare MCD e mcm:

    codice:
    #include <iostream.h>
    
    int MCD(int, int, int);
    int mcm(int, int, int);
    void fact(int, int*, int);
    
    int main() {
    	int a,b,c;
    	bool is;
    	int co = 0;
    
    cout << "Tre numeri interi:\n";
    cin >> a;
    cin >> b;
    cin >> c;
    
    int numfirst[5000];
    for(int i = 2; i < 5000; i++) {
    	is = true;
    for(int j = 2; j < i/2; j++)
    if((i%j) == 0) is = false;
    
    		if(is) 
    			numfirst[co] = i;
    			co++;
    }
    
    fact(a, numfirst, co);
    fact(b, numfirst, co);
    fact(c, numfirst, co);
    
    cout << endl;
    cout << "\nmcm(" << a << ", " << b << ", " << c << ")" << " = " << mcm(a, b, c) << endl;
    cout << "MCD(" << a << ", " << b << ", " << c << ")" << " = " << MCD(a, b, c) << endl << endl;
    
    cout << "Premi un tasto per uscire: ";
    char exit;
    cin >> exit;
    
    return 0;
    
    }
    
    int mcm(int a, int b, int c) {
    	for(int mcm = 2; ; mcm++) {
    		if(mcm % a == 0 && mcm % b == 0 && mcm % c == 0) break;
    	}
    	return mcm;
    }
    
    int MCD(int a, int b, int c) {
    	int max;
    	if(a > b && a > c) max = a;
    	else if(b > a && b > c) max = b;
    	else if(c > a && c > b) max = c;
    for(int MCD = max; ; MCD--) {
    		if(a % MCD == 0 && b % MCD == 0 && c % MCD == 0) break;
    	}
    	return MCD;
    }
    
    void fact(int num, int* numfirst, int co) {
    	cout << endl;
    	int now = num;
        for(int n = 0; n <= co; ) {
    	if(now % numfirst[n] == 0) {
    		cout << endl << now << ":";
    		cout << numfirst[n] << "\r";
    		now /= numfirst[n];
    		n = 0;
    	}
    	else n++;
       }
    }
    Non è commentato, se ti serve lo faccio.

    L'esempio per fattorizzare non è male, sennò c'è quello in qbasic del labirinto, nella realtà per uscire da un labirinto, se c'è un uscita, basta mettere la mano destra sul muro destro e camminare senza mai staccare la mano, sapendo questo si potrebbe fare il programma, ecco un esempio non fatto da me, se conosci qbasic potresti provare a tradurre questo:

    codice:
    100 'LABIRINT: crea un labirinto, e lo risolve
    110 '
    120 DEFINT A-Z 'Tutte variabili intere per velocit…
    130 '
    140 ' - Dichiarazioni e costanti -
    150 '
    160 SCR = 2 'Dati per SCREEN usato
    170 DIMX = 640
    180 DIMY = 200
    190 NCASX = 30 'Numero caselle del labirinto
    200 NCASY = 16
    210 DIM L(NCASX, NCASY, 4)'4 connessioni per casella (a,s,b,d),+esplorata (0)
    220 DIM SX(NCASX * NCASY)'Stack caselle, sovradimensionato per sicurezza
    230 DIM SY(NCASX * NCASY)
    240 DIM D(4) 'Direzioni possibili da una certa casella
    250 DIM DX(4), DY(4)'Differenza in x ed y nella direzione indicata
    260 DX(1) = 0: DY(1) = -1 'Verso l'alto
    270 DX(2) = -1: DY(2) = 0 'Verso sinistra
    280 DX(3) = 0: DY(3) = 1 'Verso il basso
    290 DX(4) = 1: DY(4) = 0 'Verso destra
    300 DIM DI(4) 'Direzione inversa
    310 DI(1) = 3: DI(2) = 4: DI(3) = 1: DI(4) = 2
    320 CR$ = CHR$(13) 'Return
    330 '
    340 ' - Main -
    350 '
    360 RANDOMIZE TIMER
    370 KEY OFF: SCREEN SCR
    380 FINITO = 0: WHILE NOT FINITO
    390   CLS : LOCATE 1, 9: PRINT "- Labirinto ricorsivo -";
    400   PRINT " di Giacomo Zorzi -";
    410   GOSUB 540 'Calcola dimensioni e posizione labirinto
    420   GOSUB 640 'Prepara array con bordo circostante
    430   GOSUB 850 'Disegna reticolo iniziale
    440   GOSUB 980 'Crea labirinto
    450   GOSUB 1350 'E lo risolve
    460   A$ = "Ho trovato l'uscita (Return per smettere, Spazio per un altro): "
    470   GOSUB 1660: IF C$ = CR$ THEN FINITO = -1
    480 WEND
    490 SCREEN 0: CLS
    500 END
    510 '
    520 ' - Calcola dimensioni caselle e posizione labirinto -
    530 '
    540 DCX = DIMX \ (NCASX + 2)'Dimensione X, bordi laterali pari a 2 caselle
    550 DCY = (DIMY - 4 * (DIMY \ 25)) \ NCASY'Dimensione Y, con spazio per 4 linee
    560 X0 = (DIMX - NCASX * DCX) \ 2'Posizione dell'angolo superiore sinistro
    570 Y0 = 2 * (DIMY \ 25)
    580 XENTRA = 1 + INT(NCASX * RND)'Posizione entrata
    590 XESCE = 1 + INT(NCASX * RND)'E uscita
    600 RETURN
    610 '
    620 ' - Prepara array L() inizializzato a zero, tranne i bordi -
    630 '
    640 FOR X = 1 TO NCASX 'Azzera tutti i collegamenti
    650   FOR Y = 1 TO NCASY
    660     FOR I = 0 TO 4 'Lo zero indica se Š stata esplorata
    670       L(X, Y, I) = 0
    680     NEXT I
    690   NEXT Y
    700 NEXT X
    710 Y = 1 'Bordo superiore
    720 FOR X = 1 TO NCASX: L(X, Y, 1) = -1: NEXT X'Non si passa verso l'alto
    730 Y = NCASY 'Bordo inferiore
    740 FOR X = 1 TO NCASX: L(X, Y, 3) = -1: NEXT X'Non si passa verso il basso
    750 X = 1 'Bordo sinistro
    760 FOR Y = 1 TO NCASY: L(X, Y, 2) = -1: NEXT Y'Non si passa verso sinistra
    770 X = NCASX 'Bordo destro
    780 FOR Y = 1 TO NCASY: L(X, Y, 4) = -1: NEXT Y'Non si passa verso destra
    790 L(XENTRA, NCASY, 3) = -2'Entrata
    800 L(XESCE, 1, 1) = -3'E uscita
    810 RETURN
    820 '
    830 ' - Disegna reticolo iniziale -
    840 '
    850 FOR X = X0 TO X0 + DCX * NCASX STEP DCX'Linee verticali
    860   LINE (X, Y0)-(X, Y0 + NCASY * DCY)
    870 NEXT X
    880 FOR Y = Y0 TO Y0 + DCY * NCASY STEP DCY'Linee orizzontali
    890   LINE (X0, Y)-(X0 + NCASX * DCX, Y)
    900 NEXT Y
    910 Y = Y0 + NCASY * DCY'Aggiunge entrata e uscita
    920 LINE (X0 + (XENTRA - 1) * DCX + 1, Y)-STEP(DCX - 2, 0), 0'Con una linea nera
    930 LINE (X0 + (XESCE - 1) * DCX + 1, Y0)-STEP(DCX - 2, 0), 0
    940 RETURN
    950 '
    960 ' - Crea labirinto -
    970 '
    980 A$ = "Premi Return per creare un labirinto: ": GOSUB 1660
    990 X = XENTRA: Y = NCASY 'Parte dall'entrata
    1000 LIV = 0 'Contatore di livello per stack
    1010 FATTO = 0: WHILE NOT FATTO 'Ciclo pseudo-ricorsivo
    1020   L(X, Y, 0) = 1'La casella corrente Š gi… stata esplorata
    1030   ND = 0 'Prepara array D() con le ND direzioni possibili
    1040   FOR I = 1 TO 4
    1050     IF L(X, Y, I) <> 0 GOTO 1070'Direzione gi… collegata
    1060       IF L(X + DX(I), Y + DY(I), 0) = 0 THEN ND = ND + 1: D(ND) = I'Inesplorata
    1070   NEXT I
    1080   IF ND = 0 GOTO 1180 'Esegue linee seguenti se ci sono direzioni libere
    1090     D = D(1 + INT(ND * RND))'Sceglie una direzione a caso tra quelle libere
    1100     L(X, Y, D) = 1'Si collega con la casella adiacente
    1110     AX = X + DX(D): AY = Y + DY(D)'Di cui calcola le coordinate
    1120     L(AX, AY, DI(D)) = 1'E la collega con s‚ stessa
    1130     GOSUB 1260 'Abbatte la parete
    1140     LIV = LIV + 1'Salva nello stack la casella corrente
    1150     SX(LIV) = X: SY(LIV) = Y
    1160     X = AX: Y = AY 'Si sposta sulla casella adiacente
    1170   GOTO 1210 'Esegue linee seguenti se non ci sono direzioni libere
    1180     X = SX(LIV): Y = SY(LIV) 'Riprende casella precedente dallo stack
    1190     LIV = LIV - 1
    1200     IF LIV = -1 THEN FATTO = -1'Esaurito lo stack, il labirinto Š finito
    1210 WEND
    1220 RETURN
    1230 '
    1240 ' - Abbatte visivamente una parete dalla cella X,Y nella direzione D -
    1250 '
    1260 XC = X0 + (X - 1) * DCX: YC = Y0 + (Y - 1) * DCY'Angolo superiore sinistro cella
    1270 IF D = 1 THEN LINE (XC + 1, YC)-STEP(DCX - 2, 0), 0
    1280 IF D = 2 THEN LINE (XC, YC + 1)-STEP(0, DCY - 2), 0
    1290 IF D = 3 THEN LINE (XC + 1, YC + DCY)-STEP(DCX - 2, 0), 0
    1300 IF D = 4 THEN LINE (XC + DCX, YC + 1)-STEP(0, DCY - 2), 0
    1310 RETURN
    1320 '
    1330 ' - Risolve labirinto -
    1340 '
    1350 A$ = "Premi Return per risolverlo, Spazio se lo vuoi al rallentatore: "
    1360 GOSUB 1660: LENTO = (C$ = " ")'Attiva rallentatore se battuto spazio
    1370 X = XENTRA: Y = NCASY 'Parte dall'entrata
    1380 LIV = 0 'Contatore di livello per stack
    1390 RISOLTO = 0: WHILE NOT RISOLTO 'Ciclo pseudo-ricorsivo
    1400   L(X, Y, 0) = 2'La casella corrente Š gi… stata esplorata
    1410   PSET (X0 + X * DCX - DCX \ 2, Y0 + Y * DCY - DCY \ 2)'La marca con un puntino
    1420   IF LENTO THEN PLAY "p16" 'Ritardo se va al rallentatore
    1430   ND = 0 'Prepara array D() con le ND direzioni possibili
    1440   FOR I = 1 TO 4
    1450     C = L(X, Y, I)'Collegamento nella direzione data
    1460     IF C = -3 THEN RISOLTO = -1: I = 5: GOTO 1490'Ha trovato l'uscita
    1470     IF C <> 1 GOTO 1490'Direzione non valida
    1480       IF L(X + DX(I), Y + DY(I), 0) = 1 THEN ND = ND + 1: D(ND) = I'Inesplorata
    1490   NEXT I
    1500   IF RISOLTO GOTO 1610 'Se ha trovato l'uscita, ha finito
    1510     IF ND = 0 GOTO 1580 'Esegue linee seguenti se ha direzioni libere
    1520       D = D(1 + INT(ND * RND))'Sceglie direzione a caso tra quelle libere
    1530       AX = X + DX(D): AY = Y + DY(D)'Di cui calcola le coordinate
    1540       LIV = LIV + 1'Salva nello stack la casella corrente
    1550       SX(LIV) = X: SY(LIV) = Y
    1560       X = AX: Y = AY 'Si sposta sulla casella adiacente
    1570     GOTO 1610 'Esegue linee seguenti se non ci sono direzioni libere
    1580       PRESET (X0 + X * DCX - DCX \ 2, Y0 + Y * DCY - DCY \ 2)'Toglie il puntino
    1590       X = SX(LIV): Y = SY(LIV) 'Riprende casella precedente dallo stack
    1600       LIV = LIV - 1
    1610 WEND
    1620 RETURN
    1630 '
    1640 ' - Messaggio A$ sull'ultima linea, aspetta Return o spazio in C$ -
    1650 '
    1660 LOCATE 24, 4: PRINT A$;
    1670 WHILE INKEY$ <> "": WEND'Pulisce buffer di tastiera
    1680 LOCATE , , 1'Mostra cursore utente
    1690 OK = 0: WHILE NOT OK
    1700   C$ = INPUT$(1)
    1710   IF C$ = CR$ OR C$ = " " THEN OK = -1 ELSE BEEP
    1720 WEND
    1730 LOCATE , , 0'Nasconde cursore utente
    1740 LOCATE 24, 1: PRINT SPACE$(79); 'Ripulisce la linea
    1750 RETURN
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  9. #9
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  10. #10
    grazie mille!!!
    Proudly statisticheited bai UTONTER
    Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
    Nella sua dimora di R'lyeh, il morto Cthulhu aspetta sognando

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 © 2025 vBulletin Solutions, Inc. All rights reserved.