Advertisement
gabrielbonham

F# - Exercicios

Sep 22nd, 2013
2,688
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 72.99 KB | None | 0 0
  1. //Programação Funcional (Atividade Final)
  2. //
  3. //NOME: Gabriel Eduardo da Silva
  4. //Matricula: 11121BSI215
  5. //
  6. //Exercícios de Programação (1a Parte)
  7. //
  8. //1. Faça uma função que peça as 4 notas bimestrais e retorne a média.
  9.  
  10. open System
  11.  
  12. let principal =
  13.     System.Console.WriteLine("Digite uma nota: ")
  14.     let nota1 = float(System.Console.ReadLine())
  15.     System.Console.WriteLine("Digite uma nota: ")
  16.     let nota2 = float(System.Console.ReadLine())
  17.     System.Console.WriteLine("Digite uma nota: ")
  18.     let nota3 = float(System.Console.ReadLine())
  19.     System.Console.WriteLine("Digite uma nota: ")
  20.     let nota4 = float(System.Console.ReadLine())
  21.     let media = ((nota1+nota2+nota3+nota4)/4.0)
  22.     printf ("A media das notas eh: %A") media
  23.     0
  24.  
  25. System.Console.WrieLine()
  26.  
  27. //2. Faça um Programa que pergunte quanto você ganha por hora e o número de horas trabalhadas no mês.
  28. //Calcule e mostre o total do seu salário no referido mês.
  29.  
  30. //3. Faça um Programa que pergunte quanto você ganha por hora e o número de horas trabalhadas no mês.
  31. //Calcule e mostre o total do seu salário no referido mês, sabendo-se que são descontados 11% para o
  32. //Imposto de Renda, 8% para o INSS e 5% para o sindicato, faça um programa que nos dê:
  33. //a. salário bruto.
  34. //i. quanto pagou ao INSS.
  35. //ii. quanto pagou ao sindicato.
  36. //iii. o salário líquido.
  37. //iv. calcule os descontos e o salário líquido, conforme a tabela abaixo:
  38. //v. + Salário Bruto : R$
  39. //vi. - IR (11%) : R$
  40. //vii. - INSS (8%) : R$
  41. //viii. - Sindicato ( 5%) : R$
  42. //ix. = Salário Liquido : R$ (Obs.: Salário Bruto - Descontos = Salário Líquido.)
  43.  
  44. open System
  45.  
  46. let principal =
  47.    
  48.     System.Console.WriteLine("Qual o seu salario por hora? ")
  49.     let salarioHora = float(System.Console.ReadLine())
  50.     System.Console.WriteLine("Quantas horas trabalhadas? ")
  51.     let horasTrab = float(System.Console.ReadLine())
  52.     let salarioBruto = float(salarioHora * horasTrab)
  53.     let IR = float((11.*salarioBruto)/100.)
  54.     let INSS = float((8.*salarioBruto)/100.)
  55.     let Sindicato = float((5.*salarioBruto)/100.)
  56.     printf("Seu salario bruto eh: R$ %A\n") salarioBruto
  57.     printf("Voce pagou ao sindicato: R$ %A\n") Sindicato
  58.     let salarioLiquido = salarioBruto - (IR+INSS+Sindicato)
  59.     printf("Seu salario liquido eh: R$ %A\n") salarioLiquido
  60.     0
  61.  
  62. System.Console.ReadKey()
  63.  
  64. //4. Faça um programa para uma loja de tintas. O programa deverá pedir o tamanho em metros quadrados da área a ser pintada.
  65. //Considere que a cobertura da tinta é de 1 litro para cada 3 metros quadrados e que a tinta é vendida em latas de 18 litros,
  66. //que custam R$ 80,00. Informe ao usuário a quantidades de latas de tinta a serem compradas e o preço total.
  67.  
  68. open System
  69.  
  70. let principal =
  71.     System.Console.WriteLine("Qual o tamanho em metros quadrados da area: ")
  72.     let area = float(System.Console.ReadLine())
  73.     let cobertura = 3.0
  74.     let latasL = 18.0
  75.     let latasP = 80.00
  76.     let latasT = Math.Ceiling((area/(latasL*cobertura)))
  77.     printf("Sao necessarias %A latas. \n") latasT
  78.     let total = latasT*latasP
  79.     printf("O valor total eh: R$ %A \n") (latasT*latasP)
  80.  
  81. System.Console.ReadKey()
  82.  
  83. //5. Faça um Programa para uma loja de tintas. O programa deverá pedir o tamanho em metros quadrados da área a ser pintada.
  84. //Considere que a cobertura da tinta é de 1 litro para cada 6 metros quadrados e que a tinta é vendida em latas de 18 litros,
  85. //que custam R$ 80,00 ou em galões de 3,6 litros, que custam R$ 25,00. Informe ao usuário as quantidades de tinta a serem compradas
  86. //e os respectivos preços em 3 situações:
  87. //i. comprar apenas latas de 18 litros;
  88. //ii. comprar apenas galões de 3,6 litros;
  89. //iii. misturar latas e galões, de forma que o preço seja o menor.
  90.  
  91. open System
  92.  
  93. let principal =
  94.     printf "Entre com a área em m2: "
  95.     let area = float(System.Console.ReadLine())
  96.     let maxlatas = Math.Ceiling(area/(18.*6.))
  97.     let maxgaloes = Math.Ceiling(area/(3.6*6.))
  98.     printf "1) número de latas = %.1f\n" maxlatas
  99.     printf "   custo = R$ %.2f\n" (maxlatas*80.)
  100.     printf "2) número de galoes = %.1f\n" maxgaloes
  101.     printf "   custo = R$ %.2f\n" (maxgaloes*25.)
  102.     let mutable custoMinimo = 10000000.0
  103.     let mutable custo = 0.0
  104.     let mutable cobertura = 0.0
  105.     let mutable latas = 0
  106.     let mutable galoes = 0
  107.     for i = 0 to int(maxlatas) do
  108.         for j = 0 to int(maxgaloes) do
  109.            custo <- 80.*(float i) + 25.*(float j)
  110.            cobertura <- 108.*(float i)+21.6*(float j)
  111.            if (custo < custoMinimo) && (cobertura >= area)
  112.                 then
  113.                     custoMinimo <- custo
  114.                     latas <- i
  115.                     galoes <- j
  116.     printf "3) número de latas  = %d\n" latas
  117.     printf "   número de galoes = %d\n" galoes
  118.     printf "   custo = R$ %.2f\n" custoMinimo
  119.    
  120. System.Console.ReadKey()
  121.  
  122. //Exercícios de Programação (2a Parte)
  123.  
  124. //1. Faça um Programa que peça um valor e mostre na tela se o valor é positivo ou negativo.
  125.  
  126. open System
  127.  
  128. let principal =
  129.     System.Console.WriteLine("Digite um valor: ")
  130.     let valor = int (System.Console.ReadLine())
  131.     if valor < 0 then printf("O valor eh negativo.\n")
  132.     elif valor = 0 then printf("O valor 0 eh Neutro.\n")
  133.     else printf("O valor eh positivo.\n")
  134.  
  135. System.Console.ReadKey()
  136.  
  137. //2. Faça um programa para a leitura de duas notas parciais de um aluno.
  138. //O programa deve calcular a média alcançada por aluno e apresentar:
  139. //o A mensagem "Aprovado", se a média alcançada for maior ou igual a sete;
  140. //o A mensagem "Reprovado", se a média for menor do que sete;
  141. //o A mensagem "Aprovado com Distinção", se a média for igual a dez.
  142.  
  143. open System
  144.  
  145. let principal =
  146.    
  147.     System.Console.WriteLine("Digite a primeira nota: ")
  148.     let nota1= float(System.Console.ReadLine())
  149.     System.Console.WriteLine("Digite a segunda nota: ")
  150.     let nota2= float(System.Console.ReadLine())
  151.     let media = (nota1+nota2)/2.0
  152.     if media < 10.0 && media >= 7.0 then printf("Aprovado!!\n")
  153.     elif media < 7.0 then printf("Reprovado!!\n")
  154.     elif media = 10.0 then printf("Aprovado com Distinção!!\n")
  155.     else printf("Digite notas entre 0.0 e 10.0\n")
  156.  
  157. System.Console.ReadKey()
  158.  
  159. //3. Faça um Programa que leia três números e mostre o maior deles.
  160.  
  161. open System
  162.  
  163. let principal =
  164.     System.Console.WriteLine("Digite um numero: ")
  165.     let n1 = int(System.Console.ReadLine())
  166.     System.Console.WriteLine("Digite um numero: ")
  167.     let n2 = int(System.Console.ReadLine())
  168.     System.Console.WriteLine("Digite um numero: ")
  169.     let n3 = int(System.Console.ReadLine())
  170.     let mutable maior = n1
  171.     if n2 > maior then maior <- n2
  172.     if n3 > maior then maior <- n3
  173.     printf("O maior numero digitado foi: %A\n") maior
  174.     0
  175.  
  176. System.Console.ReadKey()
  177.  
  178. //4. Faça um Programa que leia três números e mostre o maior e o menor deles.
  179.  
  180. open System
  181.  
  182. let principal =
  183.     System.Console.WriteLine("Digite um numero: ")
  184.     let n1 = int(System.Console.ReadLine())
  185.     System.Console.WriteLine("Digite um numero: ")
  186.     let n2 = int(System.Console.ReadLine())
  187.     System.Console.WriteLine("Digite um numero: ")
  188.     let n3 = int(System.Console.ReadLine())
  189.     let mutable maior = n1
  190.     let mutable menor = n1
  191.     if n2 > maior then maior <- n2
  192.     if n3 > maior then maior <- n3
  193.     if n2 < menor then menor <- n2
  194.     if n3 < menor then menor <- n3
  195.     printf("O menor numero digitado foi: %A\n") menor
  196.     printf("O maior numero digitado foi: %A\n") maior
  197.     0
  198.  
  199. System.Console.ReadKey()
  200.  
  201. //5. Faça um Programa que leia três números e mostre-os em ordem decrescente.
  202.  
  203. open System
  204.  
  205. let principal =
  206.     System.Console.WriteLine("Digite um numero: ")
  207.     let a = int(System.Console.ReadLine())
  208.     System.Console.WriteLine("Digite um numero: ")
  209.     let b = int(System.Console.ReadLine())
  210.     System.Console.WriteLine("Digite um numero: ")
  211.     let c = int(System.Console.ReadLine())
  212.     if (a > b && a > c && b > c) then printf("Os valores em ordem decrescente são: %A %A %A\n") a b c
  213.     elif (a > c && a > b && c > b) then printf("Os valores em ordem decrescente são: %A %A %A\n") a c b
  214.     elif (c > b && c > a && b > a) then printf("Os valores em ordem decrescente são: %A %A %A\n") c b a
  215.     elif (c > b && c > a && a > b) then printf("Os valores em ordem decrescente são: %A %A %A\n") c a b
  216.     elif (b > a && b > c && a > c) then printf("Os valores em ordem decrescente são: %A %A %A\n") b a c
  217.     elif (b > c && b > a && c > a) then printf("Os valores em ordem decrescente são: %A %A %A\n") b c a
  218.     0
  219.  
  220. System.Console.ReadKey()
  221.  
  222. //6. As Organizações Tabajara resolveram dar um aumento de salário aos seus colaboradores e
  223. //lhe contraram para desenvolver o programa que calculará os reajustes. Faça um programa que
  224. //recebe o salário de um colaborador e o reajuste segundo o seguinte critério, baseado no salário atual:
  225. //o salários até R$ 280,00 (incluindo) : aumento de 20%
  226. //o salários entre R$ 280,00 e R$ 700,00 : aumento de 15%
  227. //o salários entre R$ 700,00 e R$ 1500,00 : aumento de 10%
  228. //o salários de R$ 1500,00 em diante : aumento de 5%
  229.  
  230. //Após o aumento ser realizado, informe na tela:
  231. //o o salário antes do reajuste;
  232. //o o percentual de aumento aplicado;
  233. //o o valor do aumento;
  234. //o o novo salário, após o aumento.
  235.  
  236. let principal =
  237.     System.Console.WriteLine("Digite o seu salário: ")
  238.     let mutable salario = float(System.Console.ReadLine())
  239.     let mutable salarioPos = salario
  240.     let mutable reajuste = 0
  241.     if salario <= 280.0 then salarioPos <- (salario + ((salario*20.0)/100.0))
  242.     elif salario > 280.0 && salario <= 700.0 then salarioPos <- (salario + ((salario*15.0)/100.0))
  243.     elif salario > 700.0 && salario <= 1500.0 then salarioPos <- (salario + ((salario*10.0)/100.0))
  244.     elif salario > 1500.0 then salarioPos <- (salario + ((salario*5.0)/100.0))
  245.     printf("Seu salario anterior era: R$ %A\n") salario
  246.     let mutable reajuste = 0.0
  247.     if salario <= 280.0 then reajuste <- 20.0
  248.     elif salario > 280.0 && salario <= 700.0 then reajuste <- 15.0
  249.     elif salario > 700.0 && salario <= 1500.0 then reajuste <- 10.0
  250.     elif salario > 1500.0 then reajuste <- 5.0
  251.     printf("O percentual de reajuste foi de %A porcento\n") reajuste
  252.     let mutable aumento = 0.0
  253.     if salario <= 280.0 then aumento <- (salarioPos - salario)
  254.     elif salario > 280.0 && salario <= 700.0 then aumento <- (salarioPos - salario)
  255.     elif salario > 700.0 && salario <= 1500.0 then aumento <- (salarioPos - salario)
  256.     elif salario > 1500.0 then aumento <- (salarioPos - salario)
  257.     printf("Seu aumento foi de: R$ %A\n") aumento
  258.     printf("Seu novo salário é: %A\n") salarioPos
  259.     0
  260.  
  261. System.Console.ReadKey()
  262.  
  263. //7. Faça um Programa que peça um número correspondente a um determinado ano e em seguida informe se este ano é ou não bissexto.
  264.  
  265. open System
  266.  
  267. let principal =
  268.     System.Console.WriteLine("Digite um ano: ")
  269.     let ano = int(System.Console.ReadLine())
  270.     if ano%4 = 0 && ano%100 <> 0 then
  271.         printf("O ano %A é BISSEXTO!!") ano
  272.     if ano%400 then
  273.         printf("O ano %A é BISSEXTO!!") ano
  274.     else printf("O ano %A NÃO é BISSEXTO!!") ano
  275.     0
  276.  
  277. System.Console.ReadKey()
  278.  
  279. //Faça um Programa que peça uma data no formato dd/mm/aaaa e determine se a mesma é uma data válida.
  280.  
  281. let principal =
  282.     System.Console.WriteLine("Digite uma dia no formato dd: ")
  283.     let dia = int(System.Console.ReadLine())
  284.     System.Console.WriteLine("Digite um mês no formato mm: ")
  285.     let mes = int(System.Console.ReadLine())
  286.     System.Console.WriteLine("Digite um ano no formato aaaa: ")
  287.     let ano = int(System.Console.ReadLine())
  288.     if (dia > 0 && dia <= 31 && mes > 0 && mes < 13) then printf("Data Válida \n Nota: A data pode ser inválida dependendo do mês, para conferir cheque o seu calendário. \n")
  289.     else printf("Data Inválida\n")
  290.     0
  291.  
  292. let fim = System.Console.ReadKey()
  293.  
  294. //9. Faça um Programa que leia um número inteiro menor que 1000 e imprima a quantidade de centenas, dezenas e unidades do mesmo.
  295. //o Observando os termos no plural a colocação do "e", da vírgula entre outros. Exemplo:
  296. //o 326 = 3 centenas, 2 dezenas e 6 unidades
  297. //o 12 = 1 dezena e 2 unidades Testar com: 326, 300, 100, 320, 310,305, 301, 101, 311, 111, 25, 20, 10, 21, 11, 1, 7 e 16
  298.  
  299. open System
  300.  
  301. let rec aplica f lista1 lista2 =
  302.     match lista1, lista2 with
  303.     | [], [] -> []
  304.     | x::xs, y::ys -> (f x y)::(aplica f xs ys)  
  305.  
  306. let ftexto nro texto =
  307.     match nro with
  308.     | 0 -> ""
  309.     | 1 -> string(nro) + texto
  310.     | _ -> string(nro) + texto + "s"
  311.  
  312.  
  313. let pp =
  314.     System.Console.WriteLine("Digite um numero inteiro: ")
  315.     let valor = int (System.Console.ReadLine())
  316.     let [c;d;u] = aplica ftexto [valor/100; (valor/10)%10; valor%10] [" centena";" dezena";" unidade"]
  317.     printf "O numero digitado tem: %s %s %s" c d u
  318.     0
  319.  
  320. pp
  321. System.Console.ReadKey()
  322.  
  323. // Learn more about F# at http://fsharp.net
  324.  
  325. //Faça um Programa para um caixa eletrônico. O programa deverá perguntar ao usuário a valor do saque e depois informar quantas notas de cada valor serão fornecidas. As notas disponíveis serão as de 1, 5, 10, 50 e 100 reais. O valor mínimo é de 10 reais e o máximo de 600 reais. O programa não deve se preocupar com a quantidade de notas existentes na máquina.
  326. //o Exemplo 1: Para sacar a quantia de 256 reais, o programa fornece duas notas de 100, uma nota de 50, uma nota de 5 e uma nota de 1;
  327. //o Exemplo 2: Para sacar a quantia de 399 reais, o programa fornece três notas de 100, uma nota de 50, quatro notas de 10, uma nota de 5 e quatro notas de 1.
  328.  
  329. open System
  330.  
  331. let principal =
  332.     System.Console.WriteLine("Digite o valor desejado: ")
  333.     let mutable valor = int(System.Console.ReadLine())
  334.     let mutable nota1 = 0
  335.     let mutable nota5 = 0
  336.     let mutable nota10 = 0
  337.     let mutable nota50 = 0
  338.     let mutable nota100 = 0
  339.     if valor >= 100 then
  340.         nota100 <- (valor/100)
  341.         valor <- (valor%100)
  342.     if valor > 50 then
  343.         nota50 <- (valor/50)
  344.         valor <- (valor%50)
  345.     if valor > 10 then
  346.         nota10 <- (valor/10)
  347.         valor <- (valor%10)
  348.     if valor > 5 then
  349.         nota5 <- (valor/5)
  350.         valor <- (valor%5)
  351.     printf("O caixa deve retornar: \n %A Notas de Cem; \n %A Notas de Cinquenta; \n %A Notas de Dez; \n %A Notas de Cinco;\n %A Notas de Um; \n") nota100 nota50 nota10 nota5 valor
  352.  
  353. System.Console.ReadKey()
  354.  
  355. //11. Faça um Programa que peça um número e informe se o número é inteiro ou ponto flutuante (racional).
  356.  
  357. let principal =
  358.     System.Console.WriteLine("Digite um numero: ")
  359.     let numero = float(System.Console.ReadLine())
  360.     if  numero%2.0 = 0.0 || numero%2.0 = 1.0 then printf("Numero Inteiro!!\n")
  361.     else printf("Numero Real!!\n")
  362.     0
  363.  
  364. System.Console.ReadKey()
  365.  
  366. //12. Um posto está vendendo combustíveis com a seguinte tabela de descontos:
  367. //Álcool:
  368. //o até 20 litros, desconto de 3% por litro
  369. //o acima de 20 litros, desconto de 5% por litro
  370. //Gasolina:
  371. //o até 20 litros, desconto de 4% por litro
  372. //o acima de 20 litros, desconto de 6% por litro
  373. //Escreva um algoritmo que leia o número de litros vendidos,
  374. //o tipo de combustível (codificado da seguinte forma: A-álcool,
  375. //G-gasolina), calcule e imprima o valor a ser pago pelo cliente
  376. //sabendo-se que o preço do litro da gasolina é R$ 2,50 o preço
  377. //do litro do álcool é R$ 1,90.
  378.  
  379. open System
  380.  
  381. let principal =
  382.     System.Console.WriteLine("Digite o numero de litros vendidos: ")
  383.     let litros = float(System.Console.ReadLine())
  384.     System.Console.WriteLine("Digite o Tipo de Combustivel: use A para Alcool e G para Gasolina: ")
  385.     let tipo = char(System.Console.ReadLine())
  386.     let mutable valor = 0.0
  387.     if tipo = 'A' || tipo = 'a' then
  388.         valor <- litros * 1.9
  389.         if litros > 0. && litros <= 20. then
  390.             valor <- (valor - ((3.0*valor)/100.0))
  391.             printf("O valor a ser pago é: R$ %A\n") valor
  392.         elif litros > 20. then
  393.             valor <- (valor - ((5.0*valor)/100.0))
  394.             printf("O valor a ser pago é: R$ %A\n") valor
  395.         else printf("Valor Inválido!!\n")
  396.     elif tipo = 'G' || tipo = 'g' then
  397.         valor <- litros * 2.5
  398.         if litros > 0.0 && litros <= 20.0 then
  399.             valor <- (valor - ((4.0*valor)/100.0))
  400.             printf("O valor a ser pago é: R$ %A\n") valor
  401.         elif litros > 20. then
  402.             valor <- (valor - ((6.0*valor)/100.0))
  403.             printf("O valor a ser pago é: R$ %A\n") valor
  404.         else printf("Valor Inválido!!\n")
  405.     else printf("Tipo Inválido!!")
  406.     0
  407.  
  408. System.Console.ReadKey()
  409.  
  410. //Exercícios de Programação (3a Parte)
  411.  
  412. //13. Faça um programa que peça uma nota, entre zero e dez.
  413. //Mostre uma mensagem caso o valor seja inválido e continue
  414. // pedindo até que o usuário informe um valor válido.
  415.  
  416. let valido n = if n>=0 && n<=10 then true
  417.                else false
  418.  
  419. let principal =
  420.     System.Console.WriteLine("Digite um numero entre zero e dez: ")
  421.     let mutable n = int(System.Console.ReadLine())
  422.     while (valido n) = false do
  423.         printf("Numero Inválido!!\n Digite um numero entre zero e dez: ")
  424.         n <- int(System.Console.ReadLine())
  425.     printf("Numero Válido. Obrigado.\n")
  426.     0
  427.  
  428. principal
  429.  
  430. System.Console.ReadKey()
  431.  
  432. //14. Faça um programa que leia um nome de usuário e a sua senha e não aceite a
  433. //senha igual ao nome do usuário, mostrando uma mensagem de erro e voltando
  434. //a pedir as informações.
  435.  
  436. let principal =
  437.     System.Console.WriteLine("Username: ")
  438.     let mutable username = string(System.Console.ReadLine())
  439.     System.Console.WriteLine("Password: ")
  440.     let mutable password = string(System.Console.ReadLine())
  441.     while username.Equals(password) do
  442.         printf("Erro!! O Username e Password são iguais.\n")
  443.         System.Console.WriteLine("Username: ")
  444.         username <- string(System.Console.ReadLine())
  445.         System.Console.WriteLine("Password: ")
  446.         password <- string(System.Console.ReadLine())
  447.     printf("Username e Password válidos. Obrigado.")
  448.  
  449. principal
  450.  
  451. System.Console.ReadKey()
  452.  
  453. //15. Supondo que a população de um país A seja da ordem de 80000 habitantes com uma
  454. //taxa anual de crescimento de 3% e que a população de B seja 200000 habitantes
  455. //com uma taxa de crescimento de 1.5%. Faça um programa que calcule e escreva o
  456. //número de anos necessários para que a população do país A ultrapasse ou iguale
  457. //a população do país B, mantidas as taxas de crescimento.
  458.  
  459. let principal =
  460.     let mutable popA = 80000.0
  461.     let mutable popB = 200000.0
  462.     let mutable ac = 0
  463.     while popA < popB do
  464.         popA <- (popA + (3.*popA/100.))
  465.         popB <- (popB + (1.5*popB/100.))
  466.         ac <- ac+1
  467.     printf("São necessários %A anos.\n") ac
  468.  
  469. principal
  470. System.Console.ReadKey()
  471.  
  472. //16. Faça um programa que imprima na tela os números de 1 a 20, um abaixo do outro.
  473. //Depois modifique o programa para que ele mostre os números um ao lado do outro.
  474.  
  475. let principal =
  476.     let mutable n = 1
  477.     while n <= 20 do
  478.         printf "%A\n" n
  479.         n <- n+1
  480.     n <- 1
  481.     while n <= 20 do
  482.         printf "%A " n
  483.         n <- n+1
  484.  
  485.  
  486. principal
  487. System.Console.ReadKey()
  488.  
  489. //17. Faça um programa que receba dois números inteiros e gere os números inteiros
  490. //que estão no intervalo compreendido por eles.
  491.  
  492. let principal =
  493.     System.Console.WriteLine("Digite um valor A: ")
  494.     let A = int(System.Console.ReadLine())
  495.     System.Console.WriteLine("Digite um valor B: ")
  496.     let B = int(System.Console.ReadLine())
  497.     let intervalo = [(A+1)..(B-1)]
  498.     printf("%A\n") intervalo
  499.     0
  500.  
  501. principal
  502.  
  503. System.Console.ReadKey()
  504.  
  505. //18. Altere o programa anterior para mostrar no final a soma dos números.
  506.  
  507. let rec soma lista =
  508.     match lista with
  509.     |[] -> 0
  510.     |x::xs -> x + soma xs
  511.  
  512. let principal =
  513.     System.Console.WriteLine("Digite um valor A: ")
  514.     let A = int(System.Console.ReadLine())
  515.     System.Console.WriteLine("Digite um valor B: ")
  516.     let B = int(System.Console.ReadLine())
  517.     let intervalo = [(A+1)..(B-1)]
  518.     printf("Intervalo: %A\n") intervalo
  519.     printf("Soma do Intervalo: %A\n") (soma intervalo)
  520.     0
  521.  
  522. principal
  523.  
  524. System.Console.ReadKey()
  525.  
  526. //19. Desenvolva um gerador de tabuada, capaz de gerar a tabuada de qualquer número
  527. //inteiro entre 1 a 10. O usuário deve informar de qual numero ele deseja ver a
  528. //tabuada. A saída deve ser conforme o exemplo abaixo:
  529. //Tabuada de 5: 5 X 1 = 5 5 X 2 = 10 ... 5 X 10 = 50
  530.  
  531. let principal =
  532.     System.Console.WriteLine("Digite um numero: ")
  533.     let n = int(System.Console.ReadLine())
  534.     printf("Tabuada: \n")
  535.     for i = 1 to 10 do
  536.         printf("%A x %A = %A\n") n i (n*i)
  537.     0
  538.  
  539. principal
  540.  
  541. System.Console.ReadKey()
  542.  
  543. //20. Faça um programa que peça dois números, base e expoente,
  544. //calcule e mostre o primeiro número elevado ao segundo número.
  545. // Não utilize a função de potência da linguagem.
  546.  
  547. let principal =
  548.     System.Console.WriteLine("Digite um numero: ")
  549.     let A = int(System.Console.ReadLine())
  550.     System.Console.WriteLine("Digite um numero: ")
  551.     let B = int(System.Console.ReadLine())
  552.     let mutable soma = A
  553.     for i = 2 to B do
  554.         soma <- (soma * A)
  555.     printf("%A\n") soma
  556.     0
  557.  
  558. principal
  559.  
  560. System.Console.ReadKey()
  561.  
  562. //20. Faça um programa que peça 10 números inteiros, calcule e mostre a quantidade
  563. //de números pares e a quantidade de números impares.
  564.  
  565. let principal =
  566.     let mutable n = 0
  567.     let mutable par = 0
  568.     let mutable impar = 0
  569.     for i = 1 to 10 do
  570.         System.Console.WriteLine("Digite um numero: ")
  571.         n <- int(System.Console.ReadLine())
  572.         if n%2 = 0 then
  573.             par <- par+1
  574.         else impar <- impar+1
  575.    
  576.     printf("Foram digitados %A numero(s) par(es) e %A numero(s) impar(es).\n") par impar
  577.     0
  578.  
  579. principal
  580.  
  581. System.Console.ReadKey()
  582.  
  583. //22. A série de Fibonacci é formada pela seqüência 0,1,1,2,3,5,8,13,21,34,55,...
  584. //Faça um programa que gere a série até que o valor seja maior que 500.
  585.  
  586. let rec fib n =
  587.     match n with
  588.     |0 -> 0
  589.     |1 -> 1
  590.     |_ -> fib(n-1)+fib(n-2)
  591.  
  592.  
  593. let principal =
  594.     let mutable n = 0
  595.     while (fib n) <= 500 do
  596.         printf("%A,") (fib n)
  597.         n <- n + 1
  598.     n <- n + 1
  599.     printf("%A,") (fib n)
  600.     printf(".\n")
  601.     0
  602.  
  603. principal
  604.  
  605. System.Console.ReadKey()
  606.  
  607. //23. Faça um programa que, dado um conjunto de N números,
  608. //determine o menor valor, o maior valor e a soma dos valores.
  609.  
  610. let principal =
  611.     System.Console.WriteLine("Digite o tamanho do conjunto: ")
  612.     let mutable N =  int(System.Console.ReadLine())
  613.     System.Console.WriteLine("Digite o 1° elemento do Conjunto: ")
  614.     let mutable n = int(System.Console.ReadLine())
  615.     let mutable soma = n
  616.     let mutable menor = n
  617.     let mutable maior = n
  618.     for i = 2 to N do
  619.        printf("Digite o %A° elemento do Conjunto: \n") i
  620.        n <-  int(System.Console.ReadLine())
  621.        soma <- (soma + n)
  622.        if n < menor then
  623.             menor <- n
  624.        if n > maior then
  625.             maior <- n
  626.     printf(" Menor: %A\n Maior: %A\n Soma: %A\n") menor maior soma
  627.     0
  628.  
  629. principal
  630.  
  631. System.Console.ReadKey()
  632.  
  633. //24. Altere o programa anterior para que ele aceite apenas números entre 0 e 1000.
  634.  
  635. let principal =
  636.     System.Console.WriteLine("[1° Numero] Digite um numero entre 0 e 1000: ")
  637.     let mutable n = int(System.Console.ReadLine())
  638.     while n < 0 || n > 1000 do
  639.         printf("Numero inválido!!\n")
  640.         System.Console.WriteLine("[1° Numero]Digite um numero entre 0 e 1000: ")
  641.         n <- int(System.Console.ReadLine())
  642.     let mutable soma = n
  643.     let mutable menor = n
  644.     let mutable maior = n
  645.     for i = 2 to 10 do
  646.        printf("[%d° Numero]Digite um numero entre 0 e 1000: \n") i
  647.        n <- int(System.Console.ReadLine())
  648.        while n < 0 || n > 1000 do
  649.             printf("Numero inválido!!\n")
  650.             printf("[%d° Numero]Digite um numero entre 0 e 1000: \n") i
  651.             n <- int(System.Console.ReadLine())
  652.        soma <- (soma + n)
  653.        if n < menor then
  654.             menor <- n
  655.        if n > maior then
  656.             maior <- n
  657.     printf(" Menor: %A\n Maior: %A\n Soma: %A\n") menor maior soma
  658.     0
  659.  
  660. principal
  661.  
  662. System.Console.ReadKey()
  663.  
  664. //25. Faça um programa que peça um número inteiro e determine se ele é ou não um número primo.
  665. //Um número primo é aquele que é divisível somente por ele mesmo e por 1.
  666.  
  667. let rec nroDivisoresAux n lista ac =
  668.     match lista with
  669.     |[]-> ac
  670.     |x::xs -> if (n%x=0) then nroDivisoresAux n xs (ac+1)
  671.               else nroDivisoresAux n xs ac
  672.  
  673. let nroDivisores n = nroDivisoresAux n [1..n] 0
  674.  
  675. let principal =
  676.     System.Console.WriteLine("Digite um numero inteiro: ")
  677.     let n = int(System.Console.ReadLine())
  678.     if (nroDivisores n) = 2 then
  679.         printf("O numero é primo!!\n")
  680.     else printf("O numero não é primo!!\n")
  681.     0
  682.  
  683. principal
  684.  
  685. System.Console.ReadKey()
  686.  
  687. //26. Altere o programa de cálculo dos números primos, informando, caso o número não seja primo,
  688. //por quais número ele é divisível.
  689.  
  690. let rec nroDivisoresAux n lista ac =
  691.     match lista with
  692.     |[]-> ac
  693.     |x::xs -> if (n%x=0) then nroDivisoresAux n xs (ac+1)
  694.               else nroDivisoresAux n xs ac
  695.  
  696. let nroDivisores n = nroDivisoresAux n [1..n] 0
  697.  
  698. let rec DivisoresAux n lista lista2 =
  699.     match lista with
  700.     |[] -> lista2
  701.     |x::xs -> if (n%x=0) then DivisoresAux n xs (x::lista2)
  702.               else DivisoresAux n xs lista2
  703.  
  704. let divisores n = DivisoresAux n [1..n] []
  705.  
  706. let principal =
  707.     System.Console.WriteLine("Digite um numero inteiro: ")
  708.     let n = int(System.Console.ReadLine())
  709.     if (nroDivisores n) = 2 then
  710.         printf("O numero é primo!!\n")
  711.     else printf("O numero não é primo!!\n Seus divisores são: %A \n") (divisores n)
  712.     0
  713.  
  714. principal
  715.  
  716. System.Console.ReadKey()
  717.  
  718. //27. Faça um programa que mostre todos os primos entre 1 e N sendo N
  719. //um número inteiro fornecido pelo usuário. O programa deverá mostrar
  720. //também o número de divisões que ele executou para encontrar os números primos.
  721. //Serão avaliados o funcionamento, o estilo e o número de testes (divisões) executados.
  722.  
  723. let rec nroDivisoresAux n lista ac=
  724.     match lista with
  725.     |[]-> ac
  726.     |x::xs -> if (n%x=0) then nroDivisoresAux n xs (ac+1)
  727.               else nroDivisoresAux n xs ac
  728.              
  729. let nroDivisores n = nroDivisoresAux n [1..n] 0
  730.    
  731. let rec primoAux lista =
  732.     match lista with
  733.     |[] -> []
  734.     |x::xs -> if (nroDivisores x = 2) then x::primoAux xs
  735.               else primoAux xs
  736.    
  737. let primosAteN n = primoAux [1..n]
  738.  
  739. let principal =
  740.     System.Console.WriteLine("Digite um numero: ")
  741.     let n = int(System.Console.ReadLine())
  742.     printf("Os numeros primos até %A são: %A\n") n (primosAteN n)
  743.     printf("Foram necessárias %A divisões.\n") n
  744.     0
  745.  
  746. principal
  747.  
  748. System.Console.ReadKey()
  749.  
  750. //28. Faça um programa que calcule o mostre a média aritmética de N valores.
  751.  
  752. let principal =
  753.     System.Console.WriteLine("Digite a quantidade de valores: ")
  754.     let N = int(System.Console.ReadLine())
  755.     let mutable valor = 0
  756.     let mutable soma = 0
  757.     for i = 1 to N do
  758.         System.Console.WriteLine("Digite um valor: ")
  759.         valor <- int(System.Console.ReadLine())
  760.         soma <- (soma + valor)
  761.     let media = (float(soma) / float(N))
  762.     printf("A media é: %A\n") media
  763.     0
  764.  
  765. principal
  766.  
  767. System.Console.ReadKey()
  768.  
  769. //29. Faça um programa que calcule o fatorial de um número inteiro fornecido pelo usuário.
  770. //Ex.: 5!=5.4.3.2.1=120.
  771. //A saída deve ser conforme o exemplo abaixo:
  772. //Fatorial de: 5 5! = 5 . 4 . 3 . 2 . 1 = 120
  773.  
  774. //29. Faça um programa que calcule o fatorial de um número inteiro fornecido pelo usuário.
  775. //Ex.: 5!=5.4.3.2.1=120.
  776. //A saída deve ser conforme o exemplo abaixo:
  777. //Fatorial de: 5 5! = 5 . 4 . 3 . 2 . 1 = 120
  778.  
  779. open System
  780.  
  781. let rec fat n =
  782.     match n with
  783.     |0->1
  784.     |_->n*fat(n-1)
  785.  
  786. let rec Muda lista texto ac=
  787.     match lista with
  788.     |[] -> texto
  789.     |x::xs -> if ac =0 then Muda xs (string(x) + texto) (ac+1)
  790.               else Muda xs (string(x) + "." + texto) ac
  791.  
  792. let principal =
  793.     System.Console.WriteLine("Digite um numero: ")
  794.     let n = int(System.Console.ReadLine())
  795.     let L1 = [(1)..(n)]
  796.     printf("%A! = %A = %A \n") n (Muda L1 "" 0) (fat n)
  797.     0
  798.  
  799. principal
  800.  
  801. System.Console.ReadKey()
  802.  
  803. //30. Um funcionário de uma empresa recebe aumento salarial anualmente: Sabe-se que:
  804. //a. Esse funcionário foi contratado em 1995, com salário inicial de R$ 1.000,00;
  805. //b. Em 1996 recebeu aumento de 1,5% sobre seu salário inicial;
  806. //c. A partir de 1997 (inclusive), os aumentos salariais sempre correspondem ao dobro
  807. //do percentual do ano anterior. Faça um programa que determine o salário atual desse funcionário.
  808. //Após concluir isto, altere o programa permitindo que o usuário digite o salário inicial do funcionário.
  809.  
  810. //Considerei o reajuste anual baseado SEMPRE no salário inicial.
  811. //Caso use o reajuste baseado no salário atual, o buffer irá estourar.
  812.  
  813. let principal =
  814.     System.Console.WriteLine("Entre com um salário inicial: ")
  815.     let salarioI = float(System.Console.ReadLine())
  816.     let mutable taxa = 1.5
  817.     let mutable salario = salarioI
  818.     let mutable reajuste = (salarioI*taxa/100.)
  819.     salario <- (salario + reajuste)
  820.     for i = 1997 to 2011 do
  821.         taxa <- taxa * 2.
  822.         reajuste <- ((salarioI*taxa)/100.0)
  823.         salario <- salario + reajuste
  824.     printf("Salário atual: %A\n") salario
  825.     0
  826.  
  827. principal
  828.  
  829. System.Console.ReadKey()
  830.  
  831. //31. Foi feita uma estatística em cinco cidades brasileiras para coletar dados sobre acidentes de trânsito.
  832. //Foram obtidos os seguintes dados: Código da cidade; Número de veículos de passeio (em 1999)
  833. //e Número de acidentes de trânsito com vítimas (em 1999). Deseja-se saber:
  834. //
  835. //a. Qual o maior e menor índice de acidentes de transito e a que cidade pertence;
  836. //b. Qual a média de veículos nas cinco cidades juntas;
  837. //c. Qual a média de acidentes de trânsito nas cidades com menos de 2.000 veículos de passeio.
  838.  
  839. let indice v a = (a/v)
  840.  
  841. let rec maiorAux maior lista =
  842.     match lista with
  843.     |[] -> maior
  844.     |x::xs -> if x>maior then maiorAux x xs
  845.                else maiorAux maior xs
  846.    
  847. let maior lista =
  848.     match lista with
  849.     |x::xs -> maiorAux x xs
  850.  
  851. let rec menorAux menor lista =
  852.     match lista with
  853.     |[] -> menor
  854.     |x::xs -> if x<menor then menorAux x xs
  855.                else menorAux menor xs
  856.    
  857. let menor lista =
  858.     match lista with
  859.     |x::xs -> menorAux x xs
  860.  
  861. let principal =
  862.     //Lendo cidade 1
  863.     System.Console.WriteLine("Digite o Código da Cidade: ")
  864.     let c1 = int(System.Console.ReadLine())
  865.     System.Console.WriteLine("Numero de veículos de passeio: ")
  866.     let v1 = float(System.Console.ReadLine())
  867.     System.Console.WriteLine("Numero de acidadents de trânsito com vítimas: ")
  868.     let a1 = float(System.Console.ReadLine())
  869.     //Lendo cidade 2
  870.     let ind1 = (indice v1 a1)
  871.     System.Console.WriteLine("Digite o Código da Cidade: ")
  872.     let c2 = int(System.Console.ReadLine())
  873.     System.Console.WriteLine("Numero de veículos de passeio: ")
  874.     let v2 = float(System.Console.ReadLine())
  875.     System.Console.WriteLine("Numero de acidadents de trânsito com vítimas: ")
  876.     let a2 = float(System.Console.ReadLine())
  877.     let ind2 = (indice v2 a2)
  878.     //Lendo cidade 3
  879.     System.Console.WriteLine("Digite o Código da Cidade: ")
  880.     let c3 = int(System.Console.ReadLine())
  881.     System.Console.WriteLine("Numero de veículos de passeio: ")
  882.     let v3 = float(System.Console.ReadLine())
  883.     System.Console.WriteLine("Numero de acidadents de trânsito com vítimas: ")
  884.     let a3 = float(System.Console.ReadLine())
  885.     let ind3 = (indice v2 a2)
  886.     //Lendo cidade 4
  887.     System.Console.WriteLine("Digite o Código da Cidade: ")
  888.     let c4 = int(System.Console.ReadLine())
  889.     System.Console.WriteLine("Numero de veículos de passeio: ")
  890.     let v4 = float(System.Console.ReadLine())
  891.     System.Console.WriteLine("Numero de acidadents de trânsito com vítimas: ")
  892.     let a4 = float(System.Console.ReadLine())
  893.     let ind4 = (indice v4 a4)
  894.     //Lendo cidade 5
  895.     System.Console.WriteLine("Digite o Código da Cidade: ")
  896.     let c5 = int(System.Console.ReadLine())
  897.     System.Console.WriteLine("Numero de veículos de passeio: ")
  898.     let v5 = float(System.Console.ReadLine())
  899.     System.Console.WriteLine("Numero de acidadents de trânsito com vítimas: ")
  900.     let a5 = float(System.Console.ReadLine())
  901.     let ind5 = (indice v5 a5)
  902.     //Calculando Indice
  903.     let indices = [ind1;ind2;ind3;ind4;ind5]
  904.     let maiorI = (maior indices)
  905.     let menorI = (menor indices)
  906.     //Resposta A
  907.     let mutable maiorIC = 0
  908.     if (maiorI = ind1) then
  909.         maiorIC <- c1
  910.     if (maiorI = ind2) then
  911.         maiorIC <- c2
  912.     if (maiorI = ind3) then
  913.         maiorIC <- c3
  914.     if (maiorI = ind4) then
  915.         maiorIC <- c4
  916.     if (maiorI = ind5) then
  917.         maiorIC <- c5
  918.     printf("O maior indice é [%A] acidentes por veiculo e pertence a cidade de Código [%A].\n") maiorI maiorIC
  919.     let mutable menorIC = 0
  920.     if (menorI = ind1) then
  921.         menorIC <- c1
  922.     if (menorI = ind2) then
  923.         menorIC <- c2
  924.     if (menorI = ind3) then
  925.         menorIC <- c3
  926.     if (menorI = ind4) then
  927.         menorIC <- c4
  928.     if (menorI = ind5) then
  929.         menorIC <- c5
  930.     printf("O menor indice é [%A] acidentes por veiculo e pertence a cidade de Cógido[%A].\n") menorI menorIC
  931.     //Resposta B
  932.     let mediaV = (v1+v2+v3+v4+v5)/5.0
  933.     printf("A Média de Veiculos entre as cidades é: %A\n") mediaV
  934.     //Resposta C
  935.     //Qual a média de acidentes de trânsito nas cidades com menos de 2.000 veículos de passeio.
  936.     let mutable somaAM = 0.0
  937.     let mutable contAM = 0.0
  938.     if v1 <= 2000. then
  939.         somaAM <- (somaAM + a1)
  940.         contAM <- (contAM + 1.)
  941.     if v2 <= 2000. then
  942.         somaAM <- (somaAM + a2)
  943.         contAM <- (contAM + 1.)
  944.     if v3 <= 2000. then
  945.         somaAM <- (somaAM + a3)
  946.         contAM <- (contAM + 1.)
  947.     if v4 <= 2000. then
  948.         somaAM <- (somaAM + a4)
  949.         contAM <- (contAM + 1.)
  950.     if v5 <= 2000. then
  951.         somaAM <- (somaAM + a5)
  952.         contAM <- (contAM + 1.)
  953.     let mediaAM = float((float somaAM) / (float contAM))
  954.     printf("A média de acidentes de trânsito entre as cidades com menos de 2.000 veículos é: %A") mediaAM
  955.     0
  956.  
  957.  
  958. principal
  959.  
  960. System.Console.ReadKey()
  961.  
  962. //32. Faça um programa que leia uma quantidade indeterminada de números positivos e conte
  963. //quantos deles estão nos seguintes intervalos: [0-25], [26-50], [51-75] e [76-100].
  964. //A entrada de dados deverá terminar quando for lido um número negativo.
  965.  
  966. let principal =
  967.     let mutable n = 1
  968.     let mutable c1 = 0
  969.     let mutable c2 = 0
  970.     let mutable c3 = 0
  971.     let mutable c4 = 0
  972.     System.Console.WriteLine("Digite um numero negativo para encerrar o programa.\n")
  973.     while n > 0 do
  974.         System.Console.WriteLine("Digite um numero: ")
  975.         n <- int(System.Console.ReadLine())
  976.         if n >= 0 && n <= 25 then
  977.             c1 <- c1 + 1
  978.         if n >= 26 && n <= 50 then
  979.             c2 <- c2 + 1
  980.         if n >= 51 && n <= 75 then
  981.             c3 <- c3 + 1
  982.         if n >= 76 && n <= 100 then
  983.             c4 <- c4 + 1
  984.         if n > 100 then
  985.             printf("Numero inválido!!\n")
  986.     printf("Foram digitados [%A] numeros no intervalo entre [0-25]\n
  987.    Foram digitados [%A] numeros no intervalo entre [26-50]\n
  988.    Foram digitados [%A] numeros no intervalo entre [51-75]\n
  989.    Foram digitados [%A] numeros no intervalo entre [76-100]\n") c1 c2 c3 c4
  990.     0
  991.  
  992. principal
  993.  
  994. System.Console.ReadKey()
  995.  
  996. //33. Código Preço
  997. //Cachorro Quente 100 R$ 1,20
  998. //Bauru Simples 101 R$ 1,30
  999. //Bauru com ovo 102 R$ 1,50
  1000. //Hambúrguer 103 R$ 1,20
  1001. //Cheeseburguer 104 R$ 1,30
  1002. //Refrigerante 105 R$ 1,00
  1003. //Faça um programa que leia o código dos itens pedidos e as quantidades desejadas.
  1004. //Calcule e mostre o valor a ser pago por item (preço * quantidade) e o total geral do pedido.
  1005. //Considere que o cliente deve informar quando o pedido deve ser encerrado.
  1006.  
  1007. let principal =
  1008.     let mutable cod = 0
  1009.     let mutable quant = 0.
  1010.     let mutable item = 0.
  1011.     let mutable total = 0.0
  1012.     System.Console.WriteLine("Digite o Código 999 para encerrar o pedido;\n")
  1013.     System.Console.WriteLine("Especificação Código Preço \n
  1014.    Cachorro Quente 100 R$ 1,20 \n
  1015.    Bauru Simples 101 R$ 1,30 \n
  1016.    Bauru com ovo 102 R$ 1,50 \n
  1017.    Hambúrguer 103 R$ 1,20 \n
  1018.    Cheeseburguer 104 R$ 1,30 \n
  1019.    Refrigerante 105 R$ 1,00\n ")
  1020.     while(cod <> 999) do
  1021.         System.Console.WriteLine("Digite o Código do seu pedido: ")
  1022.         cod <- int(System.Console.ReadLine())
  1023.         if cod = 100 then
  1024.             System.Console.WriteLine("Digite a quantidade desejada: ")
  1025.             quant <- float(System.Console.ReadLine())
  1026.             total <- total + (1.2 * quant)
  1027.             item <- (1.2 * quant)
  1028.             printf("Foram pedidos [%A] Cachorro(s) Quente(s). Valor do item: R$ %A\n")quant item
  1029.         if cod = 101 then
  1030.             System.Console.WriteLine("Digite a quantidade desejada: ")
  1031.             quant <- float(System.Console.ReadLine())
  1032.             total <- total + (1.3 * quant)
  1033.             item <- (1.3 * quant)
  1034.             printf("Foram pedidos [%A] Bauru(s) Simples. Valor do item: R$ %A\n")quant item
  1035.         if cod = 102 then
  1036.             System.Console.WriteLine("Digite a quantidade desejada: ")
  1037.             quant <- float(System.Console.ReadLine())
  1038.             total <- total + (1.5 * quant)
  1039.             item <- (1.5 * quant)
  1040.             printf("Foram pedidos [%A] Bauru(s) com Ovo(s). Valor do item: R$ %A\n")quant item
  1041.         if cod = 103 then
  1042.             System.Console.WriteLine("Digite a quantidade desejada: ")
  1043.             quant <- float(System.Console.ReadLine())
  1044.             total <- total + (1.2 * quant)
  1045.             item <- (1.2 * quant)
  1046.             printf("Foram pedidos [%A] Hamburguer(es). Valor do item: R$ %A\n")quant item
  1047.         if cod = 104 then
  1048.             System.Console.WriteLine("Digite a quantidade desejada: ")
  1049.             quant <- float(System.Console.ReadLine())
  1050.             total <- total + (1.3 * quant)
  1051.             item <- (1.3 * quant)
  1052.             printf("Foram pedidos [%A] Cheeseburguer(es). Valor do item: R$ %A\n")quant item
  1053.         if cod = 105 then
  1054.             System.Console.WriteLine("Digite a quantidade desejada: ")
  1055.             quant <- float(System.Console.ReadLine())
  1056.             total <- total + (1.0 * quant)
  1057.             item <- (1.0 * quant)
  1058.             printf("Foram pedidos [%A] Refrigerante(s). Valor do item: R$ %A\n")quant item
  1059.         if cod = 999 then
  1060.             printf("O valor total do pedido é: R$ %A\n") total
  1061.     0
  1062.  
  1063. principal
  1064.  
  1065. System.Console.ReadKey()
  1066.  
  1067. //34. Em uma eleição presidencial existem quatro candidatos. Os votos são informados por meio de código.
  1068. //Os códigos utilizados são: 1 , 2, 3, 4 - Votos para os respectivos candidatos (você deve montar a tabela ex: 1 - Jose/ 2- João/etc) 5 - Voto Nulo 6 - Voto em Branco
  1069. //Faça um programa que calcule e mostre:
  1070. //o O total de votos para cada candidato;
  1071. //o O total de votos nulos;
  1072. //o O total de votos em branco;
  1073. //o A percentagem de votos nulos sobre o total de votos;
  1074. //o A percentagem de votos em branco sobre o total de votos. Para finalizar o conjunto de votos tem-se o valor zero.
  1075.  
  1076. open System
  1077.  
  1078. let principal =
  1079.     System.Console.WriteLine("Tabela de Candidatos:\n
  1080.    1 - João\n
  1081.    2 - José\n
  1082.    3 - Maria\n
  1083.    4 - Ana\n
  1084.    5 - Voto Nulo\n
  1085.    6 - Voto em Branco\n")
  1086.     let mutable ac1 = 0
  1087.     let mutable ac2 = 0
  1088.     let mutable ac3 = 0
  1089.     let mutable ac4 = 0
  1090.     let mutable ac5 = 0
  1091.     let mutable ac6 = 0
  1092.     let mutable voto = 15
  1093.     while (voto <> 0) do
  1094.         printf("Digite o numero referente ao seu voto: ")
  1095.         voto <- int(System.Console.ReadLine())
  1096.         if voto < 0 && voto > 6 then
  1097.             printf("Numero Inválido!!\n")
  1098.         if voto = 1 then ac1 <- (ac1 + 1)
  1099.         if voto = 2 then ac2 <- (ac2 + 1)
  1100.         if voto = 3 then ac3 <- (ac3 + 1)
  1101.         if voto = 4 then ac4 <- (ac4 + 1)
  1102.         if voto = 5 then ac5 <- (ac5 + 1)
  1103.         if voto = 6 then ac6 <- (ac6 + 1)
  1104.     let totalV = (ac1 + ac2 + ac3 + ac4 + ac5 + ac6)
  1105.     let percentualN = ((ac5*100)/totalV)
  1106.     let percentualB = ((ac6*100)/totalV)
  1107.     printf("O total de votos para o candidado [1 - João] foi: %A\n") ac1
  1108.     printf("O total de votos para o candidado [2 - José ] foi: %A\n") ac2
  1109.     printf("O total de votos para o candidado [3 - Maria] foi: %A\n") ac3
  1110.     printf("O total de votos para o candidado [4 - Ana] foi: %A\n") ac4
  1111.     printf("O total de votos nulos[5] foi: %A\n") ac5
  1112.     printf("O total de votos em branco [6] foi: %A\n") ac6
  1113.     printf("O percentual de votos nulos foi de %A porcento.\n") percentualN
  1114.     printf("O percentual de votos brancos foi de %A porcento.\n") percentualB
  1115.     0
  1116.  
  1117. principal
  1118.  
  1119. System.Console.ReadKey()
  1120.  
  1121. //35. Faça um programa que peça um numero inteiro positivo e em seguida mostre este numero invertido.
  1122. //Exemplo: 12376489 retorna 98467321
  1123.  
  1124. let rec inverteAux N aux = if (N = 0) then aux
  1125.                            else inverteAux (N/10) (aux*10 + N%10)
  1126.    
  1127. let principal =
  1128.     System.Console.WriteLine("Digite um numero inteiro positivo: ")
  1129.     let n = int(System.Console.ReadLine())
  1130.     let n1 = (inverteAux n 0)
  1131.     printf("O numero inverso a [%A] é [%A]")n n1
  1132.     0
  1133.    
  1134. principal
  1135.  
  1136. System.Console.ReadKey()
  1137.  
  1138. //Faça um programa que mostre os n termos da Série a seguir: S = 1/1 + 2/3 + 3/5 + 4/7 + 5/9 + ... + n/m.
  1139. //e imprime no final a soma da série.
  1140.  
  1141. let principal =
  1142.     System.Console.WriteLine("Digite um valor para n: ")
  1143.     let n = int(System.Console.ReadLine())
  1144.     let N = float(n)
  1145.     let mutable Soma = 0.0
  1146.     let mutable M = 0
  1147.     printf("S = ")
  1148.     for i = 1 to n do
  1149.         if i < n then
  1150.             M <- ((2*i)-1)
  1151.             Soma <- (Soma + ((float(i))/(float(M))))
  1152.             printf("%A/%A + ")i M
  1153.         if (i = n) then
  1154.             M <- ((2*i)-1)
  1155.             Soma <- (Soma + ((float(i))/(float(M))))
  1156.             printf(" %A/%A")i M
  1157.     printf("\n")
  1158.     printf("A soma é: %A\n") Soma
  1159.     0
  1160.  
  1161. principal
  1162.  
  1163. System.Console.ReadKey()
  1164.  
  1165. //Sendo H= 1 + 1/2 + 1/3 + 1/4 + ... + 1/N, faça um programa que calcule o valor de H com N termos.
  1166. //Faça um programa que mostre os n termos da Série a seguir: S = 1/1 + 2/3 + 3/5 + 4/7 + 5/9 + ... + n/m.
  1167. //e imprima no final a soma da série.
  1168.  
  1169. let principal =
  1170.     System.Console.WriteLine("Digite um valor para n: ")
  1171.     let n = int(System.Console.ReadLine())
  1172.     let mutable SomaS = 0.0
  1173.     let mutable SomaH = 0.0
  1174.     let mutable M = 0
  1175.     printf("H = ")
  1176.     for i = 1 to n do
  1177.         if i < n then
  1178.             SomaH <- (SomaH + (1./(float(i))))
  1179.             printf("1/%A + ")i
  1180.         if (i = n) then
  1181.             SomaH <- (SomaH + (1./(float(i))))
  1182.             printf("1/%A")i
  1183.     printf("\n")
  1184.     printf("A soma de H é: %A\n") SomaH
  1185.     printf("S = ")
  1186.     for i = 1 to n do
  1187.         if i < n then
  1188.             M <- ((2*i)-1)
  1189.             SomaS <- (SomaS + ((float(i))/(float(M))))
  1190.             printf("%A/%A + ")i M
  1191.         if (i = n) then
  1192.             M <- ((2*i)-1)
  1193.             SomaS <- (SomaS + ((float(i))/(float(M))))
  1194.             printf(" %A/%A")i M
  1195.     printf("\n")
  1196.     printf("A soma de S é: %A\n") SomaS
  1197.     0
  1198.  
  1199. principal
  1200.  
  1201. System.Console.ReadKey()
  1202.  
  1203. //Exercícios de Programação (4a Parte)
  1204.  
  1205. //36. Faça um Programa que leia um vetor de 5 números inteiros e mostre-os.
  1206.  
  1207. open System
  1208.  
  1209. let principal =
  1210.     let vetor = Array.zeroCreate 5
  1211.     for i = 0 to vetor.Length - 1 do
  1212.         printf("Digite um numero: ")
  1213.         vetor.[i] <- int(System.Console.ReadLine())
  1214.     printf("Você criou o vetor: %A\n") vetor
  1215.     0
  1216.  
  1217. principal
  1218.  
  1219. System.Console.ReadKey()
  1220.  
  1221. //37. Faça um Programa que leia um vetor de 10 números reais e mostre-os na ordem inversa.
  1222.  
  1223. open System
  1224.  
  1225. let principal=
  1226.     let vetor = Array.zeroCreate 10
  1227.     for i = 0 to vetor.Length-1 do
  1228.         printf("Digite um numero: ")
  1229.         vetor.[i] <- float(System.Console.ReadLine())
  1230.     let mutable aux = (vetor.Length-1)
  1231.     printf("Vetor inverso: \n")
  1232.     while(aux >= 0) do
  1233.         printf("%A\n") vetor.[aux]
  1234.         aux <- (aux-1)
  1235.     0
  1236.  
  1237. principal
  1238.  
  1239. System.Console.ReadKey()
  1240.  
  1241. //38. Faça um Programa que leia 20 números inteiros e armazene-os num vetor.
  1242. //Armazene os números pares no vetor PAR e os números IMPARES no vetor impar.
  1243. //Imprima os três vetores.
  1244.  
  1245. open System
  1246.  
  1247. let principal =
  1248.     let vetor = [|(1)..(20)|]
  1249.     let mutable acP = 0
  1250.     let mutable acI = 0
  1251.     for i = 0 to vetor.Length - 1 do
  1252.          System.Console.WriteLine("Digite um valor: ")
  1253.          vetor.[i] <- int(System.Console.ReadLine())
  1254.          if vetor.[i]%2 = 0 then
  1255.             acP <- (acP + 1)
  1256.          else acI <- (acI + 1)
  1257.     let PAR = [|(1)..(acP)|]
  1258.     let IMPAR = [|(1)..(acI)|]
  1259.     let mutable j = 0
  1260.     for i = 0 to vetor.Length - 1 do
  1261.         if vetor.[i]%2 = 0 then
  1262.             PAR.[j] <- vetor.[i]
  1263.             j <- j+1
  1264.     j <- 0
  1265.     for i = 0 to vetor.Length - 1 do
  1266.         if vetor.[i]%2 = 1 then
  1267.             IMPAR.[j] <- vetor.[i]
  1268.             j <- j+1
  1269.     printf("Vetor: %A\n") vetor
  1270.     printf("Vetor Par: %A\n") PAR
  1271.     printf("Vetor Impar: %A\n") IMPAR
  1272.     0
  1273.  
  1274. principal
  1275.  
  1276. System.Console.ReadKey()
  1277.  
  1278. //39. Faça um Programa que peça as quatro notas de 10 alunos,
  1279. // calcule e armazene num vetor a média de cada aluno,
  1280. // imprima o número de alunos com média maior ou igual a 7.0.
  1281.  
  1282. let principal =
  1283.     let mutable sNota = 0.
  1284.     let mutable nota = -1.0
  1285.     let vetorM = Array.zeroCreate 10
  1286.     for i = 0 to vetorM.Length - 1 do
  1287.         printf("Aluno [%A] \n")(i+1)
  1288.         for j = 1 to 4 do
  1289.             while(nota<0. || nota > 10.) do
  1290.                 printf("Digite a %A° nota: ") j
  1291.                 nota <- float(System.Console.ReadLine())
  1292.                 if nota<0. || nota > 10. then
  1293.                     printf("Nota inválida!!\n")
  1294.             sNota <- (sNota + nota)
  1295.         vetorM.[i] <- (sNota/4.)
  1296.         sNota <- 0.
  1297.     for i = 0 to (vetorM.Length) - 1 do
  1298.         if vetorM.[i] >= 7. then
  1299.             printf("O Aluno [%A] teve média: %A\n")(i+1) vetorM.[i]
  1300.     0
  1301.  
  1302. principal
  1303.  
  1304. System.Console.ReadKey()
  1305.  
  1306. //40. Faça um Programa que leia dois vetores com 10 elementos cada.
  1307. //Gere um terceiro vetor de 20 elementos, cujos valores deverão
  1308. //ser compostos pelos elementos intercalados dos dois outros vetores.
  1309.  
  1310. let principal =
  1311.     let v1 = Array.zeroCreate 10
  1312.     let v2 = Array.zeroCreate 10
  1313.     let v3 = Array.zeroCreate 20
  1314.     let mutable aux = 0
  1315.     for i = 0 to (v1.Length) - 1 do
  1316.         printf("Digite um valor para a posição [%A] do 1° vetor: ")i
  1317.         v1.[i] <- int(System.Console.ReadLine())
  1318.     for i = 0 to (v2.Length) - 1 do
  1319.         printf("Digite um valor para a posição [%A] do 2° vetor: ")i
  1320.         v2.[i] <- int(System.Console.ReadLine())
  1321.     for i = 0 to (v1.Length) - 1 do
  1322.         if aux%2 = 0 then
  1323.             v3.[aux] <- v1.[i]
  1324.             aux <- (aux+1)
  1325.         if aux%2 = 1 then
  1326.             v3.[aux] <- v2.[i]
  1327.             aux <- (aux+1)
  1328.     printf("Vetor Composto: %A\n") v3
  1329.     0
  1330.  
  1331. principal
  1332.  
  1333. System.Console.ReadKey()
  1334.  
  1335. //41. Faça um programa que receba a temperatura média de cada mês do ano e armazene-as em uma lista.
  1336. //Após isto, calcule a média anual das temperaturas e mostre todas as temperaturas acima da média anual,
  1337. // e em que mês elas ocorreram (mostrar o mês por extenso: 1 – Janeiro, 2 – Fevereiro, . . . ).
  1338.  
  1339. let principal =
  1340.     let meses = [|"1 - Janeiro"
  1341.                   "2 - Fevereiro"
  1342.                   "3 - Março"
  1343.                   "4 - Abril"
  1344.                   "5 - Maio"
  1345.                   "6 - Junho"
  1346.                   "7 - Julho"
  1347.                   "8 - Agosto"
  1348.                   "9 - Setembro"
  1349.                   "10 - Outubro"
  1350.                   "11 - Novembro"
  1351.                   "12 - Dezembro"|]
  1352.     let mutable somaT = 0.
  1353.     let vetor = [|(1.)..(12.)|]
  1354.     for i = 0 to (vetor.Length)-1 do
  1355.         printf("Digite a temperatura para [%A]:") meses.[i]
  1356.         vetor.[i] <- float(System.Console.ReadLine())
  1357.         somaT <- (somaT + vetor.[i])
  1358.     let media = (somaT/float(vetor.Length))
  1359.     printf("A média anual é de: %A°. \n") media
  1360.     for i = 0 to vetor.Length-1 do
  1361.         if vetor.[i] > media then
  1362.             printf("A temperatura %A° ocorrida no mês %A está acima da média atual.\n")vetor.[i] meses.[i]
  1363.     0
  1364.  
  1365. principal
  1366.  
  1367. System.Console.ReadKey()
  1368.  
  1369. //42. Faça um programa que leia um número indeterminado de valores, correspondentes a notas,
  1370. //encerrando a entrada de dados quando for informado um valor igual a -1 (que não deve ser armazenado).
  1371. //Após esta entrada de dados, faça:
  1372. //
  1373. //a. Mostre a quantidade de valores que foram lidos;
  1374. //b. Exiba todos os valores na ordem em que foram informados, um ao lado do outro;
  1375. //c. Exiba todos os valores na ordem inversa à que foram informados, um abaixo do outro;
  1376. //d. Calcule e mostre a soma dos valores;
  1377. //e. Calcule e mostre a média dos valores;
  1378. //f. Calcule e mostre a quantidade de valores acima da média calculada;
  1379. //g. Calcule e mostre a quantidade de valores abaixo de sete;
  1380. //h. Encerre o programa com uma mensagem;
  1381.  
  1382. let principal =
  1383.     let mutable nota = 0.
  1384.     let mutable soma = 0.
  1385.     let mutable ac7 = 0
  1386.     let vetor = [|(1.)..(999.)|]
  1387.     let mutable ac = 0
  1388.     while nota <> -1. do
  1389.         printf("Digite uma nota: ")
  1390.         nota <- float(System.Console.ReadLine())
  1391.         if nota <> -1. then
  1392.             vetor.[ac] <- nota
  1393.             soma <- (soma + nota)
  1394.             ac <- (ac+1)
  1395.     printf("\n")
  1396.     printf("Foram lidos %A valores.\n") ac
  1397.     printf("\n")
  1398.     let media = (soma/float(ac))
  1399.     printf("Valores em ordem: ")
  1400.     for i = 0 to ac-1 do
  1401.         printf("%A, ")vetor.[i]
  1402.     printf("\n")
  1403.     printf("\n")
  1404.     printf("Valores em ordem inversa: \n")
  1405.     while (ac <> 0) do
  1406.         printf("%A\n") vetor.[ac-1]
  1407.         ac <- (ac-1)
  1408.     printf("\n")
  1409.     printf("Soma: %A\n") soma
  1410.     printf("\n")
  1411.     printf("Media: %A\n") media
  1412.     printf("\n")
  1413.     for i = 0 to ac-1 do
  1414.         if vetor.[i] > media then
  1415.         printf("O Vetor[%A] tem valor {%A} que é maior que a média [%A]\n")i vetor.[i] media
  1416.     for i = 0 to ac-1 do
  1417.         if vetor.[i] < 7. then
  1418.             printf("O Vetor[%A] tem valor {%A} que é menor do que 7.\n")i vetor.[i]
  1419.             ac7 <- ((ac7)+1)
  1420.     printf("\n")
  1421.     printf("Foram digitados [%A] valores abaixo de 7.\n")ac7
  1422.     printf("\n")
  1423.     System.Console.WriteLine("Mensagem de Encerramento!!")
  1424.     0
  1425.  
  1426. principal
  1427.  
  1428. System.Console.ReadKey()
  1429.  
  1430. //43. Uma empresa de pesquisas precisa tabular os resultados da seguinte enquete feita a um grande quantidade de organizações:
  1431. //"Qual o melhor Sistema Operacional para uso es?m servidore" As possíveis respostas são:
  1432. //1- Windows Server
  1433. //2- Unix
  1434. //3- Linux
  1435. //4- Netware
  1436. //5- Mac OS
  1437. //6- Outro
  1438. //Você foi contratado para desenvolver um programa que leia o resultado da enquete e informe ao final o resultado da mesma.
  1439. //O programa deverá ler os valores até ser informado o valor 0, que encerra a entrada dos dados.
  1440. //Não deverão ser aceitos valores além dos válidos para o programa (0 a 6).
  1441. //Os valores referentes a cada uma das opções devem ser armazenados num vetor.
  1442. //Após os dados terem sido completamente informados, o programa deverá calcular a percentual de cada
  1443. //um dos concorrentes e informar o vencedor da enquete. O formato da saída foi dado pela empresa, e é o seguinte:
  1444. // SistemaOperacional   Votos %
  1445. // ------------------- ----- ---
  1446. // Windows Server 1500 17%
  1447. // Unix 3500 40% Linux 3000 34%
  1448. // Netware 500 5%
  1449. // Mac OS 150 2%
  1450. // Outro 150 2%
  1451. // ------------------- ----- ---
  1452. // Total 8800
  1453. //
  1454. // O Sistema Operacional mais votado foi o Unix, com 3500 votos, correspondendo a 40% dos votos.
  1455.  
  1456. let percentual n ac = ((float(n))*100.)/(float(ac))
  1457.  
  1458. let principal =
  1459.     let vN = [|"1- Windows Server";"2- Unix";"3- Linux";"4- Netware" ;"5- Mac OS";"6- Outro"|]
  1460.     let pergunta = "Qual o melhor Sistema Operacional para uso em servidores?"
  1461.     let opcao = "1- Windows Server \n 2- Unix  \n 3- Linux \n 4- Netware  \n 5- Mac OS  \n 6- Outro"
  1462.     let votos = Array.zeroCreate 6
  1463.     printf("%A\n") pergunta
  1464.     System.Console.WriteLine("  Tabela de Votação\n")
  1465.     printf("----------------------------------- \n %A \n -----------------------------------\n") opcao
  1466.     printf("Digite 0 para encerrar a votação.\n")
  1467.     printf("\n")
  1468.     let mutable n = 1
  1469.     let mutable ac = 0
  1470.     while n <> 0 do
  1471.         System.Console.WriteLine("Digite o numero correspondente ao seu voto: ")
  1472.         n <- int(System.Console.ReadLine())
  1473.         if n = 1 then
  1474.             votos.[0] <- (votos.[0]+1)
  1475.             ac <- (ac+1)
  1476.         if n = 2 then
  1477.             votos.[1] <- (votos.[1]+1)
  1478.             ac <- (ac+1)
  1479.         if n = 3 then
  1480.             votos.[2] <- (votos.[2]+1)
  1481.             ac <- (ac+1)
  1482.         if n = 4 then
  1483.             votos.[3] <- (votos.[3]+1)
  1484.             ac <- (ac+1)
  1485.         if n = 5 then
  1486.             votos.[4] <- (votos.[4]+1)
  1487.             ac <- (ac+1)
  1488.         if n = 6 then
  1489.             votos.[5] <- (votos.[5]+1)
  1490.             ac <- (ac+1)
  1491.     printf("\n")
  1492.     printf("Votação Encerrada.\n")
  1493.     printf("\n")
  1494.     printf("SistemaOperacional / Votos / Percentual \n ------------------------------------------------------ \b")
  1495.     printf("\n")
  1496.     for i = 0 to votos.Length-1 do
  1497.         printf("%A / %A / %.2f \n")vN.[i] votos.[i] (percentual votos.[i] ac)
  1498.     printf("------------------------------------------------------ ")
  1499.     0
  1500.  
  1501. principal
  1502.  
  1503. System.Console.ReadKey()
  1504.  
  1505. //44. A ACME Inc., uma empresa de 500 funcionários, está tendo problemas de espaço em disco no seu servidor de arquivos.
  1506. //Para tentar resolver este problema, o Administrador de Rede precisa saber qual o espaço ocupado pelos usuários, e
  1507. //identificar os usuários com maior espaço ocupado. Através de um programa, baixado da Internet, ele conseguiu gerar o
  1508. //seguinte arquivo, chamado "usuarios.txt":
  1509. //
  1510. //alexandre 456123789
  1511. //anderson 1245698456
  1512. //antonio 123456456
  1513. //carlos 91257581
  1514. //cesar 987458
  1515. //rosemary 789456125
  1516.  
  1517. //Neste arquivo, o nome do usuário possui 15 caracteres. A partir deste arquivo, você deve criar um programa que gere um relatório,
  1518. //chamado "relatório.txt", no seguinte formato:
  1519. //
  1520. //ACME Inc. Uso do espaço em disco pelos usuários
  1521. //------------------------------------------------------------------------
  1522. //Nr. Usuário Espaço utilizado % do uso
  1523. //1 alexandre 434,99 MB 16,85%
  1524. //2 anderson 1187,99 MB 46,02%
  1525. //3 antonio 117,73 MB 4,56%
  1526. //4 carlos 87,03 MB 3,37%
  1527. //5 cesar 0,94 MB 0,04%
  1528. //6 rosemary 752,88 MB 29,16%
  1529. //Espaço total ocupado: 2581,57 MB
  1530. //Espaço médio ocupado: 430,26 MB
  1531. //
  1532. //O arquivo de entrada deve ser lido uma única vez, e os dados armazenados em memória, caso sejam necessários,
  1533. //de forma a agilizar a execução do programa. A conversão da espaço ocupado em disco, de bytes para megabytes
  1534. //deverá ser feita através de uma função separada, que será chamada pelo programa principal. O cálculo do percentual
  1535. //de uso também deverá ser feito através de uma função, que será chamada pelo programa principal.
  1536.  
  1537. //45. Faça um programa que simule um lançamento de dados.
  1538. //Lance o dado 100 vezes e armazene os resultados em um vetor .
  1539. //Depois, mostre quantas vezes cada valor foi conseguido.
  1540. //Dica: use um vetor de contadores(1-6) e uma função para gerar numeros aleatórios,
  1541. //simulando os lançamentos dos dados.
  1542.  
  1543. open System
  1544.  
  1545. let principal =
  1546.     let num = Array.zeroCreate 6
  1547.     let vetor = Array.zeroCreate 100
  1548.     let rand = System.Random()
  1549.     for i = 0 to vetor.Length - 1 do
  1550.         vetor.[i] <- rand.Next(1,7)
  1551.         if vetor.[i] = 1 then
  1552.             num.[0] <- (num.[0] + 1)
  1553.         elif vetor.[i] = 2 then
  1554.             num.[1] <- (num.[1] + 1)
  1555.         elif vetor.[i] = 3 then
  1556.             num.[2] <- (num.[2] + 1)
  1557.         elif vetor.[i] = 4 then
  1558.             num.[3] <- (num.[3] + 1)
  1559.         elif vetor.[i] = 5 then
  1560.             num.[4] <- (num.[4] + 1)
  1561.         elif vetor.[i] = 6 then
  1562.             num.[5] <- (num.[5] + 1)
  1563.     for i = 0 to num.Length - 1 do
  1564.         printf("O numero [%A] foi lançado [%A] vezes.\n")
  1565.             (i+1)
  1566.             (num.[i])
  1567.     0
  1568.  
  1569. System.Console.ReadKey()
  1570.  
  1571. //Exercícios de Programação (5a Parte)
  1572.  
  1573. //46. Faça uma função que informe a quantidade de dígitos de um determinado número inteiro informado.
  1574.  
  1575. open System
  1576.  
  1577. let contadigitos n = (string(n)).Length
  1578.  
  1579. let principal =
  1580.     System.Console.WriteLine("Digite um numero: ")
  1581.     let n = int(System.Console.ReadLine())
  1582.     printf("O numero informado [%A] tem %A digitos.") n (contadigitos n)
  1583.     0
  1584.  
  1585. let fim = System.Console.ReadKey()
  1586.  
  1587. //47. Faça um programa que converta da notação de 24 horas para a notação de 12 horas.
  1588. //Por exemplo, o programa deve converter 14:25 em 2:25 P.M. A entrada é dada em dois inteiros.
  1589. //Deve haver pelo menos duas funções: uma para fazer a conversão e uma para a saída.
  1590. //Registre a informação A.M./P.M. como um valor ‘A’ para A.M. e ‘P’ para P.M.
  1591. //Assim, a função para efetuar as conversões terá um parâmetro formal para registrar se é A.M. ou P.M.
  1592. //Inclua um loop que permita que o usuário repita esse cálculo para novos valores de entrada todas as vezes que desejar.
  1593.  
  1594. let horasValidas H = if H >=0 && H < 24 then true
  1595.                      else false
  1596.  
  1597. let minutosValidos M = if M >= 0 && M < 60 then true
  1598.                        else false
  1599.  
  1600.  
  1601. let converteHoras n = if (n > 0) && (n <= 12) then n
  1602.                       else (n-12)
  1603.  
  1604.  
  1605. let registro n = if n > 0 && n <= 12 then "A.M."
  1606.                  else "P.M."
  1607.  
  1608. let principal =
  1609.     let mutable horas = -1
  1610.     let mutable minutos = -1
  1611.     let mutable continue = -1
  1612.     while (continue <> 0) do
  1613.         while (horasValidas horas) = false do
  1614.             System.Console.WriteLine("Digite as horas: ")
  1615.             horas <- int(System.Console.ReadLine())
  1616.             if (horasValidas horas) = false then
  1617.                 printf("Horário Inválido!!\n")
  1618.         while (minutosValidos minutos) = false do
  1619.             System.Console.WriteLine("Digite os minutos: ")
  1620.             minutos <- int(System.Console.ReadLine())
  1621.             if (horasValidas horas) = false then
  1622.                 printf("Horário Inválido!!\n")
  1623.         printf("\n O Horário convertido é: %A:%A[%A]\n")
  1624.             (converteHoras horas)
  1625.             minutos
  1626.             (registro horas)
  1627.         printf("\n Digite [1] para continuar [0] para terminar: ")
  1628.         continue <- int(System.Console.ReadLine())
  1629.         if continue <> 0 then
  1630.             horas <- (-1)
  1631.             minutos <- (-1)
  1632.     0
  1633.  
  1634. principal
  1635.  
  1636. //48. Data com mês por extenso.
  1637. //Construa uma função que receba uma data no formato DD/MM/AAAA e
  1638. //devolva uma string no formato D de mesPorExtenso de AAAA.
  1639. //Opcionalmente, valide a data e retorne NULL caso a data seja inválida.
  1640.  
  1641. let mesValido n = if n >= 1 && n <= 12 then true
  1642.                   else false
  1643.  
  1644. let diaValido n = if n >= 1 && n <= 31 then true
  1645.                   else false
  1646.  
  1647. let meses = [|"Vazio";"Janeiro";"Fevereiro";"Março";"Abril";"Maio";"Junho";"Julho";"Agosto";"Setembro";"Outubro";"Novembro";"Dezembro"|]
  1648.  
  1649. let principal =
  1650.     let mutable dia = 1
  1651.     let mutable mes = 1
  1652.     let mutable ano = 1
  1653.     System.Console.WriteLine("Digite um dia no formato [DD]: ")
  1654.     dia <- int(System.Console.ReadLine())
  1655.     System.Console.WriteLine("Digite um mês no formato [MM]: ")
  1656.     mes <- int(System.Console.ReadLine())
  1657.     System.Console.WriteLine("Digite um ano no formato [AAAA]: ")
  1658.     ano <- int(System.Console.ReadLine())
  1659.     if (mesValido mes) && (diaValido dia) then  
  1660.         printf("%A de %A de %A")dia meses.[mes] ano
  1661.     else printf("Data Inválida!!\n")
  1662.     0
  1663.  
  1664. principal
  1665.  
  1666. System.Console.ReadKey()
  1667.  
  1668. //49. Faça um programa para imprimir:
  1669. //    1
  1670. //    2 2
  1671. //    3 3 3
  1672. //    .....
  1673. //    n n n n n n ... n
  1674. //para um n informado pelo usuário. Use uma função que receba um valor n inteiro e imprima até a n-ésima linha.
  1675.  
  1676. let principal =
  1677.     System.Console.WriteLine("Digite um numero: ")
  1678.     let n = int(System.Console.ReadLine())
  1679.     let vetor = [|(1)..(n)|]
  1680.     for i = 0 to (n-1) do
  1681.         for j = 0 to i do
  1682.             printf("%A ") vetor.[i]
  1683.         printf("\n")
  1684.     0
  1685.  
  1686. principal
  1687. System.Console.ReadKey()
  1688.  
  1689. //50. Faça um programa para imprimir:
  1690. //    1
  1691. //    1 2
  1692. //    1 2 3
  1693. //    .....
  1694. //    1 2 3 ... n
  1695. //para um n informado pelo usuário. Use uma função que receba um valor n inteiro imprima até a n-ésima linha.
  1696.  
  1697. let principal =
  1698.     System.Console.WriteLine("Digite um numero: ")
  1699.     let n = int(System.Console.ReadLine())
  1700.     let jagged = [| for a in 1 .. n do yield [| 1 .. a |] |]
  1701.     for arr in jagged do
  1702.     for col in arr do
  1703.         printf "%i " col
  1704.     printfn ""
  1705.     0
  1706.  
  1707. principal
  1708.  
  1709. System.Console.ReadKey()
  1710.  
  1711. //51. Faça um programa que use a função valorPagamento para determinar o valor a ser pago por
  1712. //uma prestação de uma conta. O programa deverá solicitar ao usuário o valor da prestação e
  1713. //o número de dias em atraso e passar estes valores para a função valorPagamento, que calculará
  1714. //o valor a ser pago e devolverá este valor ao programa que a chamou. O programa deverá então exibir
  1715. //o valor a ser pago na tela. Após a execução o programa deverá voltar a pedir outro valor de prestação
  1716. //e assim continuar até que seja informado um valor igual a zero para a prestação. Neste momento o programa
  1717. //deverá ser encerrado, exibindo o relatório do dia, que conterá a quantidade e o valor total de prestações
  1718. //pagas no dia. O cálculo do valor a ser pago é feito da seguinte forma. Para pagamentos sem atraso, cobrar
  1719. //o valor da prestação. Quando houver atraso, cobrar 3% de multa, mais 0,1% de juros por dia de atraso.
  1720.  
  1721. let valorPagamento valor atraso =
  1722.     let mutable V = valor
  1723.     if atraso = 0 then valor
  1724.     else V <- V + (V*3./100.)
  1725.          for i = 1 to atraso do
  1726.             V <- V + (V*0.1/100.)
  1727.          V
  1728.            
  1729. let principal =
  1730.     let vetor = [|(1.0)..(99.0)|]
  1731.     let mutable ac = 0
  1732.     let mutable valor = -1.
  1733.     let mutable atraso = 0
  1734.     let mutable soma = 0.
  1735.     System.Console.WriteLine("Digite [0] no campo valor, para encerrar o programa.\n")
  1736.     while valor <> 0. do
  1737.         System.Console.WriteLine("\nDigite o valor da prestação: ")
  1738.         valor <- float(System.Console.ReadLine())
  1739.         if valor <> 0. then
  1740.             System.Console.WriteLine("Digite os dias de atraso ")
  1741.             atraso <- int(System.Console.ReadLine())
  1742.             vetor.[ac] <- (valorPagamento valor atraso)
  1743.             printf("O valor a ser pago é: R$ %.2f\n") vetor.[ac]
  1744.             soma <- soma + vetor.[ac]
  1745.             ac <- (ac+1)
  1746.     printf("Foram pagas %A prestações,com um valor total de R$%.2f\n")ac soma
  1747.     0
  1748.  
  1749. principal
  1750.  
  1751. System.Console.ReadKey()
  1752.  
  1753. //52. Desenha moldura. Construa uma função que desenhe um retângulo usando os caracteres ‘+’ , ‘−’ e ‘| ‘.
  1754. //Esta função deve receber dois parâmetros, linhas e colunas, sendo que o valor por omissão é o valor
  1755. //mínimo igual a 1 e o valor máximo é 20. Se valores fora da faixa forem informados, eles devem ser
  1756. //modificados para valores dentro da faixa de forma elegante.
  1757.  
  1758. //53. Quadrado mágico. Um quadrado mágico é aquele dividido em linhas e colunas, com um número em cada posição
  1759. //e no qual a soma das linhas, colunas e diagonais é a mesma. Por exemplo, veja um quadrado mágico de lado 3,
  1760. //com números de 1 a 9:
  1761. //
  1762. // 8 3 4
  1763. // 1 5 9
  1764. // 6 7 2
  1765. //
  1766. //Elabore uma função que identifica e mostra na tela todos os quadrados mágicos com as características acima.
  1767. //Dica: produza todas as combinações possíveis e verifique a soma quando completar cada quadrado.
  1768. //Usar um vetor de 1 a 9 parece ser mais simples que usar uma matriz 3x3.
  1769.  
  1770. let principal =
  1771.     let matriz = Array2D.zeroCreate<int> 3 3
  1772.     for i = 0 to 2 do
  1773.         for j = 0 to 2 do
  1774.         printf("Digite um valor para posição [%A][%A] da Matriz: ")i j
  1775.         matriz.[i,j] <- int(System.Console.ReadLine())
  1776.     printf("%A") (somaH matriz)
  1777.     0
  1778.  
  1779. principal
  1780.  
  1781. System.Console.ReadKey()
  1782.  
  1783. //Exercícios de Programação (6a Parte)
  1784.  
  1785. //54. Tamanho de strings. Faça um programa que leia 2 strings e informe o conteúdo delas seguido do seu comprimento.
  1786. //Informe também se as duas strings possuem o mesmo comprimento e são iguais ou diferentes no conteúdo.
  1787. //
  1788. //Compara duas strings
  1789. //String 1: Brasil Hexa 2006
  1790. //String 2: Brasil! Hexa 2006!
  1791. //Tamanho de "Brasil Hexa 2006": 16 caracteres
  1792. //Tamanho de "Brasil! Hexa 2006!": 18 caracteres
  1793. //As duas strings são de tamanhos diferentes.
  1794. //As duas strings possuem conteúdo diferente.
  1795.  
  1796. let principal =
  1797.     System.Console.WriteLine("Digite a primeira string: ")
  1798.     let s1 = (System.Console.ReadLine())
  1799.     System.Console.WriteLine("Digite a segunda string: ")
  1800.     let s2 = (System.Console.ReadLine())
  1801.     printf ("A string [%A] tem tamanho: %A caracteres\n") s1 (s1.Length)
  1802.     printf ("A string [%A] tem tamanho: %A caracteres\n") s2 (s2.Length)
  1803.     if s1.Length = s2.Length then printf("As duas strings tem o mesmo tamanho.\n")
  1804.     else printf("As duas strings são de tamanhos diferentes.\n")
  1805.     if s1.Equals(s2) then printf("As duas strings são iguais.\n")
  1806.     else printf("As duas strings são diferentes.")
  1807.     0
  1808.  
  1809. principal
  1810.  
  1811. System.Console.ReadKey()
  1812.  
  1813. //55. Nome ao contrário em maiúsculas. Faça um programa que permita ao usuário digitar o seu nome
  1814. //e em seguida mostre o nome do usuário de trás para frente utilizando somente letras maiúsculas.
  1815. //Dica: lembre−se que ao informar o nome o usuário pode digitar letras maiúsculas ou minúsculas.
  1816.  
  1817. open System
  1818. open System.Text
  1819.  
  1820. let ReverseString (s:string) = new string(Array.rev (s.ToCharArray()))
  1821.  
  1822. let mtoM letra =
  1823.  
  1824. let principal =
  1825.     System.Console.WriteLine("Digite uma string: ")
  1826.     let s1 = (System.Console.ReadLine())
  1827.     printf("%A") (ReverseString s1)
  1828.     0
  1829.  
  1830. principal
  1831.  
  1832. System.Console.ReadKey()
  1833.  
  1834. //56. Nome na vertical. Faça um programa que solicite o nome do usuário e imprima-o na vertical.
  1835.  
  1836. open System
  1837.  
  1838. let principal =
  1839.     System.Console.WriteLine("Digite seu nome: ")
  1840.     let nome = System.Console.ReadLine()
  1841.     let NOME = nome.ToCharArray()
  1842.     for i = 0 to NOME.Length - 1 do
  1843.         printf("%c\n") NOME.[i]
  1844.     0
  1845.  
  1846. System.Console.ReadKey()
  1847.  
  1848. //57. Nome na vertical em escada. Modifique o programa anterior de forma a mostrar o nome em formato de escada.
  1849.  
  1850. open System
  1851.  
  1852. let principal =
  1853.     System.Console.WriteLine("Digite seu nome: ")
  1854.     let nome = System.Console.ReadLine()
  1855. //    let NOME = nome.ToCharArray()
  1856.     for i=0 to nome.Length-1 do
  1857.     for arr in nome.[0..i] do
  1858.         printf("%c") arr
  1859.     printf("\n")
  1860.     0
  1861.  
  1862. System.Console.ReadKey()
  1863.  
  1864. //58. Nome na vertical em escada invertida. Altere o programa anterior de modo que a escada seja invertida.
  1865.  
  1866. open System
  1867.  
  1868. let ReverseString (s:string) = new string(Array.rev (s.ToCharArray()))
  1869.  
  1870. let principal =
  1871.     System.Console.WriteLine("Digite seu nome: ")
  1872.     let nome = System.Console.ReadLine()
  1873.     let mutable j = nome.Length
  1874.     while j <> 0 do
  1875.         j <- (j - 1)
  1876.         for arr in nome.[0..j] do
  1877.             printf("%c") arr
  1878.         printf("\n")
  1879.     0
  1880.  
  1881. System.Console.ReadKey()
  1882.  
  1883. //59. Data por extenso. Faça um programa que solicite a data de nascimento (dd/mm/aaaa) do usuário
  1884. //e imprima a data com o nome do mês por extenso. o Data de Nascimento: 29/10/1973 o Você nasceu
  1885. //em 29 de Outubro de 1973.
  1886.  
  1887. open System
  1888.  
  1889. let comparaMeses (n : string) =
  1890.     let aux = [|"01";"02";"03";"04";"05";"06";"07";"08";"09";"10";"11";"12"|]
  1891.     let meses = [|"Janeiro";"Fevereiro";"Março";"Abril";"Maio";"Junho";"Julho";"Agosto";"Setembro";"Outubro";"Novembro";"Dezembro"|]
  1892.     let mutable ac = -1
  1893.     for i = 0 to 11 do
  1894.         if n.Equals(aux.[i]) then ac <- i
  1895.     meses.[ac]
  1896.  
  1897. let principal =
  1898.     System.Console.WriteLine("Digite a sua data de nascimento no formato [dd/mm/aaaa]:")
  1899.     let dn = string(System.Console.ReadLine())
  1900.     let data = dn.Split [|'/'|]
  1901.     let str = data.[1]
  1902.     printf("%s de %s de %s") data.[0] (comparaMeses str) data.[2]
  1903.     0
  1904.  
  1905. System.Console.ReadKey()
  1906.  
  1907. //60. Conta espaços e vogais. Dado uma string com uma frase informada pelo usuário (incluindo espaços em branco), conte:
  1908. //* quantos espaços em branco existem na frase.
  1909. //* quantas vezes aparecem as vogais a, e, i, o, u.
  1910.  
  1911. open System
  1912.  
  1913. let conta (str : string) (c : char) =
  1914.     let mutable ac = 0
  1915.     for i = 0 to str.Length - 1 do
  1916.         if str.[i].Equals(c) then ac <- (ac+1)
  1917.     ac
  1918.  
  1919. let principal =
  1920.     System.Console.WriteLine("Digite uma frase: ")
  1921.     let frase = (System.Console.ReadLine())
  1922.     let branco = frase.Split [|' '|]
  1923.  
  1924.     printf("Espaços em branco: %d\n") (branco.Length - 1)
  1925.     printf("A:[%A] E:[%A] I:[%A] O:[%A] U:[%A]")
  1926.         ((conta frase 'a') + (conta frase 'A'))
  1927.         ((conta frase 'e') + (conta frase 'E'))
  1928.         ((conta frase 'i') + (conta frase 'I'))
  1929.         ((conta frase 'o') + (conta frase 'O'))
  1930.         ((conta frase 'u') + (conta frase 'U'))  
  1931.     0
  1932.  
  1933. System.Console.ReadKey()
  1934.  
  1935. //61. Palíndromo. Um palíndromo é uma seqüência de caracteres cuja leitura é idêntica se feita da direita para esquerda
  1936. //ou vice−versa. Por exemplo: OSSO e OVO são palíndromes. Em textos mais complexos os espaços e pontuação são ignorados.
  1937. //A frase SUBI NO ONIBUS é o exemplo de uma frase palíndrome onde os espaços foram ignorados. Faça um programa que leia
  1938. //uma seqüência de caracteres, mostre−a e diga se é um palíndrome ou não.
  1939.  
  1940. open System
  1941.  
  1942. let palindromo (s: string) =
  1943.    let arr = s.ToCharArray()
  1944.    arr = Array.rev arr
  1945.  
  1946. let principal =
  1947.     System.Console.WriteLine("Digite uma frase ou palavra: ")
  1948.     let frase = string(System.Console.ReadLine())
  1949.     let fraseReplace = frase.Replace(" ","")
  1950.     if (palindromo fraseReplace) = true then printf("A frase/palavra [%A] é um Palindromo!!\n") frase
  1951.     else printf("A frase/palavra [%A] não é um Palindromo!!") frase
  1952.     0
  1953.  
  1954. principal
  1955.  
  1956. System.Console.ReadKey()
  1957.  
  1958. //62. Verificação de CPF.
  1959. //Desenvolva um programa que solicite a digitação de um número de CPF no formato xxx.xxx.xxx-xx
  1960. //e indique se é um número válido ou inválido através da validação dos dígitos verificadores e
  1961. //dos caracteres de formatação.
  1962.  
  1963. //63. Número por extenso.
  1964. //Escreva um programa que solicite ao usuário a digitação de um número até 99 e imprima-o na tela por extenso.
  1965.  
  1966. //let extenso n =
  1967. //    let t1 = "um"
  1968. //    let t2 = "dois"
  1969. //    let t3 = "três"
  1970. //    let t4 = "quatro"
  1971. //    let t5 = "cinco"
  1972. //    let t6 = "seis"
  1973. //    let t7 = "sete"
  1974. //    let t8 = "oito"
  1975. //    let t9 = "nove"
  1976.  
  1977. let extenso n =
  1978.     let mutable d = ((n/10)%10)
  1979.     let mutable u = (n%10)
  1980.     let texto = [|" ";"um";"dois";"três";"quatro";"cinco";"seis";"sete";"oito";"nove";|]
  1981.     let textoD1 = [|"dez";"onze";"doze";"treze";"quatorze";"quinze";"dezesseis";"dezessete";"dezoito";"dezenove"|]
  1982.     let textoD = [|" ";"dez";"vinte";"trinta";"quarenta";"cinquenta";"sessenta";"setenta";"Oitenta";"Noventa"|]
  1983.     let mutable retorno = ""
  1984.     for j=0 to 9 do
  1985.         for i=0 to 9 do
  1986.             if d = j then
  1987.                 if u = i then
  1988.                     if d = 0 then
  1989.                         retorno <- texto.[u]
  1990.                         d <- -1
  1991.                         u <-  -1
  1992.                     if d = 1 then
  1993.                         retorno <- textoD1.[u]
  1994.                         d <- -1
  1995.                         u <- -1
  1996.                     if u = 0 then
  1997.                         retorno <- textoD.[j]
  1998.                         d <- -1
  1999.                         u <- -1
  2000.                     if d = j && u = i then
  2001.                         retorno <- (textoD.[d] + " e " + texto.[u])
  2002.                         d <- -1
  2003.                         u <- -1
  2004.     retorno
  2005.  
  2006. let principal =
  2007.     let mutable n = 1
  2008.     while n > 0 && n < 100 do
  2009.         System.Console.WriteLine("Digite um numero entre 0 e 99: ")
  2010.         n <- int(System.Console.ReadLine())
  2011.         printf("%s\n") (extenso n)
  2012.     0
  2013.  
  2014. principal
  2015.  
  2016. System.Console.ReadKey()
  2017.  
  2018. //64. Jogo da palavra embaralhada.
  2019. //Desenvolva um jogo em que o usuário tenha que adivinhar uma palavra que será mostrada com as letras embaralhadas.
  2020. //O programa terá uma lista de palavras lidas de um arquivo texto e escolherá uma aleatoriamente.
  2021. //O jogador terá seis tentativas para adivinhar a palavra.
  2022. //Ao final a palavra deve ser mostrada na tela, informando se o usuário ganhou ou perdeu o jogo.
  2023.  
  2024. //65. Faça um programa que leia um arquivo texto contendo uma lista de endereços IP e gere um outro arquivo,
  2025. //contendo um relatório dos endereços IP válidos e inválidos.
  2026.  
  2027. //O arquivo de entrada possui o seguinte formato:
  2028. //
  2029. //200.135.80.9
  2030. //192.168.1.1
  2031. //8.35.67.74
  2032. //257.32.4.5
  2033. //85.345.1.2
  2034. //1.2.3.4 9.8.234.5
  2035. //192.168.0.256
  2036. //
  2037. //O arquivo de saída possui o seguinte formato:
  2038. //
  2039. //[Endereços válidos:]
  2040. //200.135.80.9
  2041. //192.168.1.1
  2042. //8.35.67.74
  2043. //1.2.3.4
  2044. //
  2045. //[Endereços inválidos:]
  2046. //257.32.4.5
  2047. //85.345.1.2
  2048. //9.8.234.5
  2049. //192.168.0.256
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement