Introdução
No post anterior (Introdução ao Processamento de Dados e Programação – Parte 01), levantamos cinco possibilidades de calcular a média de uma lista de notas salvas em um arquivo texto, onde quatro delas usam um script ou um programa. Nesse post, vamos tentar resolver o mesmo problema com outras linguagens: C++ ( Windows e Linux ), Java (Windows e Linux), Visual Basic .NET (Windows), e Linux Bash.
Recapitulando
Um arquivo texto (por exemplo “notas.txt) possui 30 linhas, cada linha com a nota da prova de um aluno — de 0 a 100 — e eu preciso criar um programa que leia todas as linhas do arquivo, calcule a soma de todas as notas, e calcule a média inteira das notas.
C++
Usando por exemplo o Visual Studio da Microsoft, podemos gerar um aplicativo sem dependências, que pode ser executado em qualquer máquina com Windows 7 pra cima — acho até que roda em Windows mais antigos, não tenho nenhum “na manga” pra teste.
#include <stdio.h> #include <stdlib.h> #include <fstream> #include <sstream> #include <string> int main() { int alunos = 0; int media = 0; int notas = 0; std::ifstream infile("notas.txt"); std::string line; while (std::getline(infile, line)) { notas += atoi(line.c_str()); alunos++; } media = notas / alunos; printf("Alunos ........... %d\n", alunos); printf("Soma das notas ... %d\n", notas); printf("Media da Classe .. %d\n", media); return 0; }
E, o resultado obtido:
Este mesmo código foi compilado no linux (g++), e funcionou (quase) perfeitamente:
— Tem uma diferença na contagem de linhas, um comportamento diferente entre plataformas. Faltou uma proteção no código para ignorar uma linha vazia — depois da ultima nota preenchida.
Java
O mesmo código abaixo foi compilado no Windows, e a classe gerada foi executada no Windows e no Linux, tranquilo — Claro, apos baixar o Java JDK do Windows (Ferramentas de desenvolvimento e compilação do Java) e o Java JRE (Máquina Virtual Java para executar aplicações) no Linux.
import java.io.*; public class calcnotas { public static void main(String[] args)throws Exception { File file = new File("notas.txt"); int alunos = 0; int notas = 0; int media = 0; BufferedReader br = new BufferedReader(new FileReader(file)); String st; while ((st = br.readLine()) != null) { notas += Integer.valueOf(st); alunos++; } media = notas / alunos; System.out.printf("Alunos ........... %d\n", alunos); System.out.printf("Soma das notas ... %d\n", notas); System.out.printf("Media da Classe .. %d\n", media); } }
Resultado no Windows
Visual Basic .NET
Usando o Visual Studio 2017 com VB .NET, funcionou também. Alguns passos para criar uma aplicação “Console”, depois codificar, compilar, corrigir, compilar, debugar … pronto, funciona.
Imports System Module Module1 Sub Main() Dim fileReader As System.IO.StreamReader fileReader = My.Computer.FileSystem.OpenTextFileReader("notas.txt") Dim stringReader As String Dim notas As Integer Dim alunos As Integer Dim media As Integer notas = 0 alunos = 0 stringReader = fileReader.ReadLine() Do While stringReader IsNot Nothing alunos = alunos + 1 notas = notas + Convert.ToInt32(stringReader) stringReader = fileReader.ReadLine() Loop media = notas \ alunos Console.WriteLine("Alunos ........... " + alunos.ToString()) Console.WriteLine("Soma das notas ... " + notas.ToString()) Console.WriteLine("Media da Classe .. " + media.ToString()) End Sub End Module
Resultado obtido:
Linux Bash
O “bash” ou interpretador de comandos do Linux também possui funcionalidades excepcionais. Vamos calcular usando um script — calcnotas.sh
#!/bin/bash input="notas.txt" notas=0 alunos=0 while IFS= read -r line do if [ ! -z "$line" ] then alunos=$(( alunos + 1 )) notas=$(( notas + line )) fi done < "$input" media=$(( notas / alunos )) echo "Alunos ........... $alunos" echo "Soma das notas ... $notas" echo "Media da Classe .. $media"
Resultado obtido:
Conclusão
Bem, por hora já temos bastante exemplos funcionais. Cada linguagem mostrada nestes posts tem as suas características especificas, sintaxe e comportamentos. Algumas são case-sensitive ( considera letras minúsculas são diferentes de maiúsculas ), em algumas (como Python) o espaçamento dos comandos (identação, espaços a esquerda de cada linha) definem inicio e final de bloco, em outras a identação é apenas uma boa prática … as declarações mudam, os tipos de dados também, os limites e comportamentos, cada uma tem o seu “charme” … E eu usei POR ENQUANTO APENAS 8 linguagens de exemplo 😀
Espero que estas informações lhes sejam úteis, ou pelo menos interessantes !!! E desejo a todos como sempre TERABYTES DE SUCESSO !!!