Hi people, I'm new here, and I wrote a calculator in FreeBASIC. It's called
"DOSCALC".
The source code is attached to this message. Suggestions are welcome.
#lang "fblite"
Option GoSub
DIM A AS DOUBLE
DIM B AS DOUBLE
DIM C AS DOUBLE
DIM D AS DOUBLE
DIM E AS DOUBLE
DIM F AS INTEGER
DIM G AS INTEGER
DIM P AS INTEGER
DIM P$(1 TO 10)
DATA "Result:","Resultado:","Make another operation? (Y/N)","Efetuar outra
operao? (S/N)"
DATA "Using the result of the current operation? (Y/N)","Utilizando o resultado
da operao atual? (S/N)"
DATA "Average of the values:","Mdia dos valores:","Body mass index:","IMC:"
FOR F = 1 TO 10
READ P$(F)
NEXT F
CLS
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Language / L¡ngua º"
PRINT "ÌÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"
PRINT "º 1 º English º"
PRINT "º 2 º Portugus º"
PRINT "ÈÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
F = 0
DO WHILE F = 0
A$ = INKEY$
IF A$ = "1" THEN F = 1
IF A$ = "2" THEN F = 2
LOOP
SELECT CASE F
CASE 1
F = 0
P = 1
CLS
GOSUB Presents
CASE ELSE
F = 0
P = 2
CLS
GOSUB Apresenta
END SELECT
DO WHILE B$ = ""
PRINT ""
IF P = 1 THEN PRINT P$(3) ELSE PRINT P$(4)
F = 0
A$ = ""
DO WHILE F = 0
A$ = INKEY$
IF A$ = "S" OR A$ = "s" THEN F = 1
IF A$ = "Y" OR A$ = "y" THEN F = 1
IF A$ = "N" OR A$ = "n" THEN F = 2
LOOP
SELECT CASE F
CASE 1
GOSUB OutraOperacao
CASE ELSE
CLS: SYSTEM
END SELECT
LOOP
Apresenta:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º DOSCALC por Carlos Henrique Baldo º"
PRINT "º Lanado sob a GNU GPL - use-o por º"
PRINT "º * sua pr¢pria conta. 07/04/2012 * º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
GOSUB MenuPrincipal
RETURN
Presents:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º DOSCALC by Carlos Henrique Baldo º"
PRINT "º Released under GNU GPL, use it º"
PRINT "º * at your own risk. 2012-04-07 * º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
GOSUB MainMenu
RETURN
MenuPrincipal:
PRINT "ÉÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º * º Tecle o n£mero correspondente º"
PRINT "ÌÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"
PRINT "º 1 º Calcular adio º"
PRINT "º 2 º Calcular subtrao º"
PRINT "º 3 º Calcular diviso º"
PRINT "º 4 º Calcular multiplicao º"
PRINT "º 5 º Calcular potenciao º"
PRINT "º 6 º Calcular raiz quadrada º"
PRINT "º 7 º Calcular porcentagem º"
PRINT "ÌÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"
PRINT "º 8 º Calcular mdia de valores º"
GOSUB Verificar
PRINT "ÈÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
GOSUB DetectaTecla
RETURN
MainMenu:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Press the corresponding number º"
PRINT "ÌÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"
PRINT "º 1 º Calculate addition º"
PRINT "º 2 º Calculate subtraction º"
PRINT "º 3 º Calculate division º"
PRINT "º 4 º Calculate multiplication º"
PRINT "º 5 º Calculate exponentiation º"
PRINT "º 6 º Calculate square root º"
PRINT "º 7 º Calculate percentage º"
PRINT "ÌÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹"
PRINT "º 8 º Calculate average of values º"
GOSUB Check
PRINT "ÈÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
GOSUB DetectaTecla
RETURN
DetectaTecla:
F = 0
A$ = ""
DO WHILE F = 0
A$ = INKEY$
IF A$ = "1" THEN F = 1
IF A$ = "2" THEN F = 1
IF A$ = "3" THEN F = 2
IF A$ = "4" THEN F = 1
IF A$ = "5" THEN F = 3
IF A$ = "6" THEN F = 4
IF A$ = "7" THEN F = 5
IF A$ = "8" THEN F = 6
IF A$ = "9" THEN F = 7
LOOP
CLS
SELECT CASE F
CASE 1
GOSUB OperacaoComum
CASE 2
GOSUB Divisao
CASE 3
GOSUB Potencia
CASE 4
GOSUB RaizQuadrada
CASE 5
GOSUB Porcentagem
CASE 6
GOSUB Media
CASE ELSE
GOSUB IMC
END SELECT
RETURN
OperacaoComum:
IF G < 7 AND P = 1 THEN INPUT "1st value: ", C
IF G < 7 AND P = 2 THEN INPUT "1§ valor: ", C
IF G = 7 AND P = 1 THEN INPUT "Value: ", E
IF G = 7 AND P = 2 THEN INPUT "Valor: ", E
IF G < 7 AND P = 1 THEN INPUT "2nd value: ", E
IF G < 7 AND P = 2 THEN INPUT "2§ valor: ", E
IF G = 7 THEN C = D
IF A$ = "1" THEN D = C + E
IF A$ = "2" THEN D = C - E
IF A$ = "4" THEN D = C * E
PRINT ""
GOSUB Resultado
RETURN
Resultado:
IF P = 1 THEN PRINT P$(1); D ELSE PRINT P$(2); D
RETURN
Potencia:
IF G < 7 THEN INPUT "Base: ", C
IF P = 1 THEN INPUT "Exponent: ", E ELSE INPUT "Expoente: ", E
IF G = 7 THEN C = D
D = C ^ E
PRINT ""
GOSUB Resultado
RETURN
Divisao:
IF G < 7 AND P = 1 THEN INPUT "Dividend: ", C
IF G < 7 AND P = 2 THEN INPUT "Dividendo: ", C
IF G = 7 THEN C = D
INPUT "Divisor: ", E
DO WHILE E = 0
CLS
IF G < 7 AND P = 1 THEN PRINT "Dividend:"; C
IF G < 7 AND P = 2 THEN PRINT "Dividendo:"; C
INPUT "Divisor: ", E
LOOP
D = C / E
PRINT ""
GOSUB Resultado
RETURN
OutraOperacao:
PRINT ""
IF P = 1 THEN PRINT P$(5) ELSE PRINT P$(6)
F = 0
A$ = ""
DO WHILE F = 0
A$ = INKEY$
IF A$ = "S" OR A$ = "s" THEN F = 1
IF A$ = "Y" OR A$ = "y" THEN F = 1
IF A$ = "N" OR A$ = "n" THEN F = 2
LOOP
SELECT CASE F
CASE 1
G = 7
PRINT ""
IF P = 1 THEN GOSUB MainMenu
IF P = 2 THEN GOSUB MenuPrincipal
CASE ELSE
G = 6
PRINT ""
IF P = 1 THEN GOSUB MainMenu
IF P = 2 THEN GOSUB MenuPrincipal
END SELECT
RETURN
Verificar:
IF F = 0 OR G = 6 THEN PRINT "º 9 º Calcular IMC º"
RETURN
Check:
IF F = 0 OR G = 6 THEN PRINT "º 9 º Calculate body mass index º"
RETURN
RaizQuadrada:
IF G < 7 AND P = 1 THEN INPUT "Value: ", E: PRINT
IF G < 7 AND P = 2 THEN INPUT "Valor: ", E: PRINT
IF G = 7 THEN E = D
D = SQR(E)
GOSUB Resultado
RETURN
Porcentagem:
IF G = 7 THEN C = D
IF G = 7 THEN GOSUB JaPorcentou
IF P = 1 THEN INPUT "Value: ", C ELSE INPUT "Valor: ", C
GOSUB JaPorcentou
RETURN
JaPorcentou:
IF P = 1 THEN INPUT "Percentage (without %): ", E ELSE INPUT "Porcentagem (sem
%): ", E
D = (C * E) / 100: PRINT
GOSUB Resultado
RETURN
Media:
IF G = 7 THEN E = D
IF P = 1 THEN INPUT "1st value: ", A ELSE INPUT "1§ valor: ", A
IF P = 1 THEN INPUT "2nd value: ", B ELSE INPUT "2§ valor: ", B
IF P = 1 THEN INPUT "3rd value: ", C ELSE INPUT "3§ valor: ", C
IF G = 7 THEN GOSUB Media2
IF P = 1 THEN INPUT "4th value: ", E ELSE INPUT "4§ valor: ", E
GOSUB Media2
RETURN
Media2:
D = (A + B + C + E) / 4: PRINT
IF P = 1 THEN PRINT P$(7); D ELSE PRINT P$(8); D
RETURN
IMC:
IF P = 1 THEN INPUT "Mass (kg): ", C ELSE INPUT "Peso (kg): ", C
IF P = 1 THEN INPUT "Height (m): ", E ELSE INPUT "Altura (m): ", E
D = C / (E ^ 2): PRINT
IF P = 1 THEN PRINT P$(9); D: PRINT ELSE PRINT P$(10); D: PRINT
IF P = 1 THEN GOSUB Message ELSE GOSUB Mensagem
RETURN
Mensagem:
IF D < 18.5 THEN GOSUB Abaixo
IF D > 18.5 AND D < 25 THEN GOSUB Ideal
IF D > 40 THEN GOSUB Acima4
IF D > 35 AND D < 40 THEN GOSUB Acima3
IF D > 30 AND D < 35 THEN GOSUB Acima2
IF D > 25 AND D < 30 THEN GOSUB Acima
RETURN
Message:
IF D < 15 THEN GOSUB Low3
IF D < 16 AND D > 15 THEN GOSUB Low2
IF D < 18.5 AND D > 16 THEN GOSUB Low
IF D > 18.5 AND D < 25 THEN GOSUB Normal
IF D > 40 THEN GOSUB High4
IF D > 35 AND D < 40 THEN GOSUB High3
IF D > 30 AND D < 35 THEN GOSUB High2
IF D > 25 AND D < 30 THEN GOSUB High
RETURN
Ideal:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Saud vel º"
PRINT "ÈÍÍÍÍÍÍÍÍÍͼ"
RETURN
Abaixo:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Abaixo do peso º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
Acima:
PRINT "ÉÍÍÍÍÍÍÍÍÍ»"
PRINT "º Peso em º"
PRINT "º excesso º"
PRINT "ÈÍÍÍÍÍÍÍÍͼ"
RETURN
Acima2:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Obesidade de º"
PRINT "º Grau I º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
Acima3:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Obesidade de Grau II º"
PRINT "º (severa) º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
Acima4:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Obesidade de Grau III º"
PRINT "º (m¢rbida) º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
Normal:
PRINT "ÉÍÍÍÍÍÍÍÍÍ»"
PRINT "º Healthy º"
PRINT "ÈÍÍÍÍÍÍÍÍͼ"
RETURN
Low3:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Very severely º"
PRINT "º underweight º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
Low2:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Severely underweight º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
Low:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Underweight º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
High:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Overweight º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
High2:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Obese Class I º"
PRINT "º (Moderated) º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
High3:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Obese Class II º"
PRINT "º (Severe) º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
High4:
PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
PRINT "º Obese Class III º"
PRINT "º (Very severe) º"
PRINT "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
RETURN
------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Freedos-devel mailing list
Freedos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-devel