Arduino – Tabelas

arduino

Em vez de lidar com nomes de alunos, notas e médias, vamos montar um dispositivo parecido com um semáforo utilizando 1 protoboard, 3 LED’s, 3 resistores, 4 fios e um hardware de placa única, como o Arduino Uno e o Raspberry Pi.  Teremos então um projeto experimental com 3 fatores (LED vermelho, LED amarelo, LED verde) e 2 níveis (aceso e apagado), o que proporciona 8 situações, conforme ilustrado a seguir em uma tabela de 8 linhas e 3 colunas.

farol0

Definimos um vetor contendo 3 LED’s e uma matriz contendo 8 vetores, cada um contendo como elementos os estados de cada um dos LED’s.

Design-timeArduino IDE:

farol_1

Design-timeSnap4Arduino:

farol_2

Runtime:

Observações:

Com o Arduino, foram utilizados como saídas digitais os pinos 9, 6 e 3.  Em Wiring (a linguagem C/C++ usada pelo Arduino IDE), a função pinMode definiu os pinos como saída (OUTPUT).  Isto fica implícito no Snap4Arduino, já que um valor booleano (verdadeiro ou falso – equivalentes a 1 e 0) foi colocado no pino.  Essa atribuição ocorre em Wiring com a função digitalWrite.

 

Com o Raspberry Pi, foram utilizados como saídas digitais os pinos 12 (GPIO18), 16 (GPIO23) e 18 (GPIO24).  Em Python 3, a função setmode utiliza BOARD se a identificação dos pinos for 12, 16 e 18; ou BCM, se for 18, 23 e 24.  A função setup define os pinos como saída (OUT). E a função output atribui ao pino um valor que pode ser 0 ou 1.

Design-timePython 3:

raspberryPi_python_3led

Design-timeScratch 2:

Em Scratch 2 os pinos são identificados pelos números BCM: GPIO18, GPIO23 e GPIO24, e os valores atribuídos são (output) high ou low.

scratch2_led

 

Runtime:

Observações:

Com o Raspberry não foi utilizado um PC Desktop rodando Windows, como no caso do Arduino; e o código em Python 3 e Scratch 2 não incluiu nem vetores e nem matrizes.

Dúvidas? A única certeza é de que o golpe vai ficando mais claro a cada dia e, logo, a narrativa da mídia sonegadora e golpista terá que mudar.

PHP – Tabela com Arrays

php

Para a versão web do aplicativo de alunos e notas, desta vez vamos utilizar apenas HTML e PHP com o servidor virtual ou personal webserver MAMP (MApache- MySQL – PHP).

  • Design-time:

Da mesma forma, as imagens a seguir, obtidas com o Sublime Text 3 e o Microsoft Paint, substituem as listagens.

HTML trata dos elementos da página web

tabela_php1

PHP trata da manipulação dos eventos da página web

tabela_php2

  • Runtime:

A imagem a seguir foi obtida com o ScreenToGif

tabela1_php

Observações:

As variáveis $alunos e $notas armazenaram os números de alunos e de notas, respectivamente, informados na página web tabela.html.  Os nomes e as notas foram armazenados separadamente nos vetores (array com uma dimensão apenas) $array1 e $array2.  Portanto, nenhuma matriz (array com mais de uma dimensão) foi necessária. Um terceiro contador, $k, foi utilizado para mostrar o nome do aluno e suas notas em cada linha, exibidos como tabela.

JavaScript – Tabela com Array Multidimensional

200px-Unofficial_JavaScript_logo_2.svg

Desta vez vamos utilizar HTML, CSS e Javascript para a versão web do aplicativo de alunos e notas.

Design-time:

Para não causar nenhum problema com o código da página do WordPress, as imagens a seguir, obtidas com Sublime Text 3 e Microsoft Paint, substituem as listagens.

  • HTML trata dos elementos da página web

tabela_html

  • CSS trata da formatação dos elementos da página web

tabela_css

  • Javascript trata da manipulação dos eventos da página web

tabela_js

Runtime:

A imagem a seguir foi obtida com o ScreenToGif.

tabela1_js

Observações:

Foram criados dinamicamente tanto os arrays nome e nota como a tabela mostrando nomes de alunos e notas de cada aluno.  Sugiro como exercício:

  • calcular as médias de cada aluno e a média da classe,
  • incluir o elemento cabeçalho da tabela (table header, th).

Logo – Matrizes bidimensionais

fmslogo

LOGO também dá suporte a matrizes multidimensionais dinâmicas, como a variável nota neste aplicativo de alunos e notas escrito com o FMSLogo.

Design-time:

to tabela
make "a first questionbox [Alunos][Informe o número de alunos:]
make "nome (array :a)
make "n first questionbox [Notas][Informe o número de notas:]
make "tamanho se :a :n
make "nota (mdarray :tamanho)

for [i 1 :a][
	setitem :i :nome first questionbox [Alunos][Informe o nome:]
	for [j 1 :n][
	make "lista se :i :j		
	mdsetitem :lista :nota first questionbox [Notas][Informe a nota:]
	]
]

for [i 1 :a][
	show item :i :nome
	for [j 1 :n][
	make "lista se :i :j		
	show mditem :lista :nota
	]
]

show :nome show :nota
end

Runtime:

alunos_logo

Observações:
  • Uso de first precedendo questionbox.
  • Uso de mdarray, mdsetitem e mditem para a variável multidimensional nota.
  • Uso do constructor se (o mesmo que sentence, para objetos word e list) com as listas: tamanho (usada com mdarray) e lista (usada com mdsetitem e mditem).
  • Uso da estrutura de repetição for em vez de repeat.

Além do FMSLogo, em SourceForge há outras opções para escrever aplicativos em Logo.  Se quiser saber mais, visite a homepage do Brian Harvey.

Fortran – Arrays e Matrizes

fortran

Que tal codificar aquele aplicativo de alunos e médias com o IBM Mathematical FORmula TRANslation System?  Sim, no bom e velho FORTRAN.  Dessa vez vamos usar o editor e compilador Force 2.0.

Design-time:

        program alunos
        implicit none
        character (len=8), allocatable, dimension(:) :: nome
        real, allocatable, dimension(:,:) :: nota
        real, allocatable, dimension(:) :: media
        integer :: a, n, i, j
        real :: sn, sm, mc

        sm=0
        print *, 'Entre o numero de alunos: '
        read *, a
        allocate(nome(a))
        print *, 'Entre o numero de notas: '
        read *, n
        allocate(nota(a,n))
        allocate(media(a))

        write(*,*)
        do i = 1, a
           sn = 0
           write(*,"(a)",advance="no") 'Aluno: '
           read *, nome(i)
           do j = 1, n
              write(*,"(a)",advance="no") 'Nota: '
              read *, nota(i,j)
              sn = sn + nota(i,j)
           end do
           media(i) = sn / n
           sm = sm + media(i)
        end do
        mc = sm / a

        write(*,*)
        write(*,"(a,1x)",advance="no") 'Aluno  '
        do j = 1, n
           write(*,"(a)",advance="no") 'Nota'
           write(*, "(i2,1x)",advance="no") j
        end do
        write(*,"(a)") 'Media'

        do i = 1, a
           write(*,"(a)",advance="no") nome(i)
           do j = 1, n
              write(*,"(f3.1,4x)",advance="no") nota(i,j)
           end do
           write(*, "(f3.1)") media(i)
        end do
        write(*,"(a)",advance="no") 'Media da classe: '
        write(*, "(f3.1)") mc
        read(*,*)
        end program alunos

Runtime:

notas_f95

Observações:

Nas linhas 4 e 15 a matriz (ou array bidimensional) de números reais (ou de ponto flutuante) nota foi declarada (com allocatable) e inicializada (com allocate) dinamicamente.

Para formatar a saída, o comando write pode incluir frases de edição entre aspas e parênteses, “( )”, além de advance=”no” quando se deseja evitar uma nova linha.

Procure “fortran pdf” no Google, escolha algum tutorial e visite fortran.com.  E mantenha a esperança. Vai passar, amanhã há de ser outro dia.