domingo, 21 de abril de 2013

Algoritmos e Programação - Um pouco sobre C

Olá a todos. Finalmente continuaremos com nossa série de programação e algoritmos em C falando do C em si. Eu gostaria de começar falando dos algoritmos sequenciais, mas sem entender o C, percebi que não seria possível começar a falar dos algoritmos. Agradecimentos a minha namorada que se propôs a ler meu post. Ontem completamos um ano de namoro! \o/ Obrigado Elen, te amo!

C é uma linguagem de programação muito famosa e que serviu de bases para outras linguagens de programação mais contemporâneas, como C++ e C# (lê-se C Sharp). Devido a ser uma linguagem muito usada na "construção" de outras linguagens, ela é geralmente a primeira a ser aprendida e é nela que aprenderemos nossas noções de algoritmos.

C foi desenvolvido por Dennis Ritchie e Ken Thompson em 1973 (considerei o fim do desenvolvimento com a adição do tipo struct, fonte Wikipédia) com o propósito de implementar o sistema Unix, que foi um dos primeiros sistemas que não foi implementado usando linguagem Assembly. Com o tempo foram acrescentadas outras características à linguagem C e, com isso, o C poderia divergir entre compiladores diferentes. Devido a isso foi estipulado o C ANSI, que é o "C mínimo", ou seja, o conjunto de comandos e funções mínimas que todo compilador de C considerado ANSI deve ter.

Para quem não sabe, ANSI significa American National Standards Institute, que é um órgão semelhante a ABNT (Associação Brasileira de Normas Técnicas) no Brasil.

Para começar nosso estudo de C, vou colocar um pequeno programa e, depois, detalhar seu funcionamento e os comandos e funções usados nele.

/*Começo do programa*/

#include >stdio.h<
#include >stdlib.h< //desinverter os símbolos de maior e menor, pois se eu escrever da maneira certa,
//o blogger entende como código HTML e "come" a expressão

int nota_1, nota_2, nota_3, media;
main()
{
    printf("Digite a nota 1: ");
    scanf("%d",&nota_1);
    printf("Digite a nota 2: ");
    scanf("%d",&nota_2);
    printf("Digite a nota 3: ");
    scanf("%d",&nota_3);
    media=(nota_1+nota_2+nota_3)/3;
    printf("A media foi: %d.\n\n",media);
    system("pause");
}

/*Fim do programa*/

Primeiro, todo texto colocado entre /*  */ é um comentário. Comentários são textos que não entram para o código de programa, não são compilados e, portanto, não acrescentam tamanho no programa. Eles são muito importantes para que outros programadores e até o próprio desenvolvedor se entenda no meio do código. Embora neste pequeno programa eles pareçam desnecessários, em programas com mais de 1000 linhas eles são fundamentais. Outra forma de fazer comentários é usando barras duplas (//). Quando se usa barras duplas, todo texto daquela linha que se encontra após as barras duplas são considerados comentários. Essa característica foi implementada no C++ e ficou tão popular que a maioria dos compiladores C a utiliza. Porém cuidado! Essa forma de fazer comentários não faz parte do C ANSI, que utiliza apenas /* */. Caso seu compilador seja C ANSI, ou esteja configurado para entender somente C ANSI, utiliza apenas a forma /* */ para escrever seus comentários.

Após o primeiro comentário, existe uma linha #include . O comando #include manda o compilador incluir um arquivo ao seu programa. Esse arquivo pode ser uma biblioteca, como nesse caso. A biblioteca incluída foi stdio.h. Deixe-me explicar tudo de novo. A biblioteca stdio.h significa Standard I/O (entradas e saídas padrão). Nessa biblioteca estão definidas as funções que usamos durante o programa para ler o teclado (scanf) e para imprimir mensagens na tela (printf). A função da biblioteca é conter funções que utilizamos sempre e que, portanto, não queremos escrever em todos os programas que fizermos. A outra biblioteca, stdlib.h serve para permitir o uso do comando system("pause"), cuja funcionalidade explicarei mais adiante.

Depois do include temos a parte de declaração de variáveis. Uma variável é um espaço da memória que guarda um valor, um número binário. Temos também variáveis de vários tipos. No caso do programa acima, o tipo usado foi o int. Variáveis do tipo int ocupam, pelo padrão ANSI, 16 bits (2 bytes) e com isso representam números inteiros (SOMENTE INTEIROS) decimais de -32767 a 32766. Existem outros tipos de variáveis, mas, por enquanto, ficaremos somente com esse tipo. Na declaração de variáveis foram declaradas quatro variáveis, que se chamam nota_1, nota_2, nota_3 e media. Lembre-se que, dentro do código do programa, NÃO SE USA ACENTOS!!!

Após o include, existe a função main. A função main contém todos as funções e comandos que estão entre suas chaves que, neste caso, é todo o programa. A função main, que significa principal, existe em todos os programas e é basicamente por ali que o programa começa.

A primeira função do programa é a função printf, que imprime no dispositivo de saída padrão (a tela do computador) a mensagem colocada em seu argumento (dentro dos parênteses) entre aspas duplas. No caso do primeiro printf, a mensagem a ser mostrada é Digite a nota 1:.

A segunda função do programa é scanf. Essa função lê do dispositivo padrão (o teclado) o que foi digitado. Ela tem dois argumentos. O primeiro é "%d", que indica que o valor digitado será armazenado em uma variável do tipo inteiro, que é representado pelo %d. O segundo argumento, &nota_1, indica que o valor lido será armazenado na variável inteira que se chama nota_1. O operador & se refere a um ponteiro, que é o endereço da variável onde será armazenado o valor. Mas, por enquanto, esqueça isso. Lembre-se apenas que no scanf é necessário colocar & antes do nome da variável onde você quer armazenar o valor.

Após isso existem outros 2 printf e 2 scanf que fazem a mesma coisa que os anteriores, mas que armazenam valores na variáveis inteiras chamadas nota_2 e nota_3. Tanto a função printf quanto a função scanf estão declaradas dentro da biblioteca stdio.h, que nós incluímos ao nosso programa na primeira linha com o comando #include

Após os printf e scanf temos um cálculo matemático. Nessa parte, acredito que não existam maiores dificuldades no entendimento. Essa linha diz que a variável média recebe o valor da soma das três notas (nota_1+nota_2+nota_3) dividido por três, que é o cálculo da média aritmética.

Continuando, existe um último printf que vai mostrar o valor calculado da média na tela. Dentro do argumento entre aspas existe um %d. Já vimos no scanf que o %d se refere a uma variável do tipo inteira. Isso informa ao printf que ele irá mostrar na tela um valor numérico que está em uma variável inteira. Mas qual variável? Devemos informar ao printf o nome da variável cujo valor queremos mostrar na tela. Para isso colocamos o nome da variável fora das aspas duplas, separada por vírgula, como exemplificado no comando acima.

Dentro daquele printf também existe um \n (contra-barra n). Esse comando informa ao printf que é necessário pular uma linha, como se fosse um Enter no bloco de notas. No caso do programa acima, eu coloquei dois \n pois quis pular duas linhas. ;)

Por fim, o comando system("pause"). Ele está lá pelo seguinte motivo. Se você fizer o programa sem ele, o programa irá funcionar. Só que, imediatamente após calcular o valor da média e mostrar na tela, a janela do programa irá se fechar, sem dar tempo para você ler o que estava escrito nela. O comando system"pause") cria uma pausa no programa. Essa pausa dura até que você pressione alguma tecla. Então, se você já baixou o DevC++, copie e cole este programa simples lá, salve em algum lugar qualquer (como a área de trabalho) e compile ele. Para compilar, você pode usar a tecla de atalho (F9), ou ir em Execute->Compile.

Práticas (após conseguir fazer o programa funcionar):

1) Retire o ponto-e-vírgula (;) de algum dos comandos do programa e tente compilá-lo. Ele funciona? Coloque os ponto-e-vírgulas de volta.

2) Retire o & antes da variável no scanf. O programa continua funcionando? O que acontece? Após, coloque o & onde ele estava.

3) Substitua a linha do último printf (aquele que mostra o valor da média) pela linha de código abaixo. Compile o programa. O que aconteceu?

printf("nota 1:%d\nnota 2:%d\nnota 3:%d\nmedia:%d\n\n",nota_1,nota_2,nota_3,media);

4) Escreva suas dúvidas, sugestões e comentários nos comentários e me ajude a constuir o próximo post sobre Algoritmos e Programação. Espero no próximo post começar a falar dos algoritmos propriamente ditos, como algoritmos sequencias. Mas só poderei fazer isso se pelo menos o básico de C já estiver dominado. Então, continuem estudando e abraço. Até a próxima.

quarta-feira, 20 de fevereiro de 2013

Problemas!!!

Ihhh pessoal, deu um problema e todas as fórmulas matemáticas pararam de funcionar!
Este problema foi apontado por um leitor em um post. Eu corrigi o problema localmente, mas constatei que isso aconteceu em todos os posts. E não foi só aqui no blog. Eu procurei e descobri que outros blogueiros que utilizavam a mesma técnica que eu utilizava tiveram o mesmo problema. :(
Estou buscando um outro meio de postar equações matemáticas no blog, um jeito diferente pois, já que esse método deu problema, não vou utilizá-lo de novo.

Abaixo vai uma amostra do novo método. Se você consegue ver uma fórmula matemática abaixo, então estamos no caminho certo.

Quando puder, corrijo todos os posts do blog, que vai dar um trabalho do caralho. Mas enfim, C'est la Vie...

limx→∞f(x)=0

Teste 2:

limx→−∞f(x)=0

O segundo limite eu gerei com um código HTML.

Só falta descobrir como fazer frações em HTML

PS.: Eu não sei muito bem o que estou fazendo. Espero que dê tudo certo...

domingo, 17 de fevereiro de 2013

Tabela de Preços

Alguns profissionais preferem, para sua melhor organização, elaborar uma tabela de preço. Nela existe o preço cobrado dependendo do serviço realizado. Hoje gostaria de mostrar para vocês a tabela de preços de nosso já conhecido amigo Peludu, o "pedrecista" faz tudo...

* Quebra galho
R$ 90,00
* É só um ajustinho
R$ 85.00
* Parafusinho
R$ 65,00
* Favor para amigo
R$ 70,00
* Só uma olhadinha
R$ 90.00
* Meu filho desprogramou
R$ 65.00
* Fulano faz por tanto
R$ 110.00
* Eu nem mexi
R$ 70.00
* Coisa simples
R$ 50.00
* Deve de ser um fiozinho solto
R$ 80.00
* Só pra ver como fica
R$ 55.00
* É só pôr isso no lugar
R$ 85.00
* Aparelho mexido por curioso
R$ 100.00
* Deve ser um fuzível
R$ 75.00
* Meu aparelho não tem nada é só um "detalhezinho"
R$ 90.00
* Serviço pra ontem
R$ 150.00
* Serviço pra já!
R$ 230.00
* É uma pecinha solta
R$ 50.00
* Duas pecinhas soltas
R$ 100.00
* Só uma soldinha, até eu mesmo faria
R$ 85.00
* Eu não confio em deixar com qualquer um, tem que ser hoje ou levo pra outro
R$ 150.00
* Eu mesmo troquei
R$ 85,00
* Me disseram pra instalar
R$ 90,00
* Eu juro que não apaguei
R$ 150,00
* Derramei em cima
R$ 95,00
* Meu amigo que fez
R$ 120,00
* Não lembro
R$ 165,00
* Peguei na internet
R$ 50,00
* Instalei do CD da revista
R$ 45,00
* Até ontem funcionava
R$ 77,00
* Se arrependimento matasse
R$ 320,00
* Minha irmã que mexeu
R$ 90,00
* Meu irmão que mexeu
R$ 120,00
* Lavei para limpar
R$ 180,00
* Caiu "Drento"
R$ 110,00
* Quebro sozinho
R$ 118,00
* Eu juro que "num fui eu"
R$ 130,00
* Me disseram que era bom
R$ 95,00
* Tá caro
R$ 480,00
* Vírus
R$ 130,00

Hahaha. Isso também mostra o calibre dos clientes que contratam os serviços de nosso amigo... Bem, até a próxima aventura de Peludu, o "pedrecista" faz tudo. Abraço!

Aniversário do Blog II

Para ser mais preciso, no dia 02/02 este Blog completou 2 anos de existência. \o/

Já tivemos no blog cerca de 105.000 visualizações e 40 comentários, que sempre foram de pessoas satisfeitas com o blog. Isso significa que, ou todos que visitam o blog saem satisfeitos, ou quem fica insatisfeito não comenta. O que é uma pena. Se você não gostar de alguma coisa e tiver uma sugestão de melhoria, por favor, expresse em um comentário. Nunca tivemos um comentário com sugestão de tema para um post. Então, se você quiser ser o primeiro a dar uma sugestão... fique à vontade.

Outra coisa... sempre tive a vontade de conseguir uma câmera filmadora, daquelas digitais mesmo, nada profissional, para fazer alguns vídeos. É que eu acho que certas coisas são difíceis de explicar e mostrar só com imagens e palavras. Quem sabe este ano o blog não adquira uma câmera digital, nem que seja emprestada para alguns posts.

Para este terceiro ano de Nerd Elétrico, temos algumas metas:

* Fazer a série de posts sobre Algoritmos (já em andamento), Programação e Linguagem C;
* Fazer uma série de posts sobre Eletrônica Digital (já em andamento) e Microprocessadores, que provavelmente será da família PIC;
* Fazer mais posts analisando circuitos práticos (já em andamento) e fazer alguns vídeos mostrando as montagens e o funcionamento real dos mesmos;
* Ainda ligado ao item de cima, fazer uma série de posts sobre amplificadores com transistores;
* Mudar a imagem do título do blog, que já tá antiga;

A demora dos posts é que, basicamente, o blog reflete o meu aprendizado dos conteúdos postados. Muitas vezes eu posto sobre assuntos que estou estudando no momento. Então a demora se deve ao fato de eu ter que "dominar" um pouco mais o assunto, para não falar tanta asneira aqui no blog.

Por enquanto vamos ficar com apenas estes objetivos. Claro que, durante o percursos, a disponibilidade de tempo pode permitir mais coisas. Mas eu quero, para 2013, realizar pelo menos os 5 itens citados acima. E saiba que é muito importante os comentários de vocês que visitam o blog. Basicamente, são os seus comentários que nos animam a continuar postando. Talvez sem seus comentários perguntando e apoiando, o blog já não existisse mais. Claro que este não é um blog famoso, nem muito visitado. Mas se aqueles que buscam um pouco de conhecimento em eletrônica encontrarem o que procuram aqui, isso já é a maior recompensa que poderíamos querer. Abraço e continuem estudando.

Algoritmos e Programação - Algoritmos


Olá a todos. Hoje vou começar uma série de posts com o objetivo de ensinar Algoritmos e Programação. Quando tive essa matéria na universidade, aprendi A&P em uma pseudo-linguagem que consistia em um português estruturado. Como achei isso uma perda de tempo, resolvi ensinar Algoritmos aqui no blog direto em uma linguagem útil, a Linguagem C. Se você não entendeu nada dessa introdução, não se preocupe... nosso objetivo é ensinar. A bibliografia da série estará fundamentalmente baseada no livro de Herbert Schildt: C Completo e Total, 3ª Edição, editora Pearson. Caso você queira aprender a programar em C (já que a ideia do blog, por enquanto, é ensinar somente algoritmos), recomendo que adquira esse livro, que é muito bom. Vamos ao post então...

Vamos começar definindo: Algoritmo é uma palavra que, segundo a Wikipédia, vem do sobrenome do matemático persa Mohamed bem Musa Al-Khwarizmi. Um algoritmo é uma sequência finita de passos que podem ser realizados numa quantidade finita de tempo, para chegar a um propósito, que pode ser resolver um problema. Lembre-se disso: Algoritmo é uma sequencia de passos para chegar a um resultado.

Vou explicar melhor aquela coisa do "finito". Imagine que você queira fazer um bolo. Então o resultado que você quer alcançar é este: ter o bolo pronto para poder comê-lo. O algoritmo para fazer o bolo se chama 'receita', que você procurou no Google ou viu no programa da Ana Maria Braga. Imagine que, para fazer o bolo, você tenha que fazer infinitas etapas (ou seja, o algoritmo demanda infinitos passos). Neste caso, você nunca vai chegar a ter o bolo pronto, pois nunca terminará de fazê-lo. Se você nunca chega no seu objetivo, então a sequência de passos não é um algoritmo.

Agora imagine que a receita tenha uma sequencia finita de passos, mas que um dos passos demanda uma quantidade infinita de tempo, como por exemplo, mexa a massa infinitamente. Neste caso, novamente, você nunca alcançará o objetivo de ter o bolo pronto e, portanto, a sequência de passos não define um algoritmo.

Portanto, está explicado. Algoritmo é uma sequência de passos finitos com duração finita que permite obter um resultado. Exemplos de algoritmos: receitas, tutoriais de qualquer coisa, alguns manuais, etc...

Pois bem, com o advento da computação, foi percebido que o computador poderia ser usado para fins úteis, além do entretenimento e pornografia. O computador poderia resolver problemas como calcular a trajetória de mísseis, achar um arquivo através de uma engine de buscas e, inclusive, descobrir a resposta para a vida, o universo e tudo mais (42).

Mas para o computador resolver todos os problemas que não existiam antes dele, era preciso ensiná-lo a fazer as coisas. E o ato de ensinar um computador a fazer algo é chamado de programação. Programar um computador nada mais é que ensiná-lo um algoritmo em uma determinada linguagem de programação. E existem muitas linguagens de programação, cada uma com suas vantagens, desvantagens e aplicações específicas. Dentre as linguagem, eu cito a linguagem Assembly, C, C++, Java, MATLAB,etc...

A diferença entre linguagens é muita. Enquanto algumas linguagens conseguem comunicar diretamente com o hardware da máquina (mexer em bits de registradores, por exemplo), dentre elas o Assembly e o C, outras servem para criar aplicativos, e não lidar tanto com hardware, como Java. MATLAB, por exemplo, é uma linguagem com recursos específicos para lidar com simulação e problemas matemáticos.

Cada linguagem é diferente. São recursos diferentes e propósitos diferentes. Porém a linguagem é a parte mais fácil do processo de programação. O mais difícil é o algoritmo, que basicamente se aplica para qualquer linguagem. Um programa que coloque uma lista em ordem crescente seria diferente em C e Java, mas ambos poderiam ter a mesma ideia, basicamente a mesma sequencia de passos, ou seja, o mesmo algoritmo. Ao resolver um problema de programação, a parte mais trabalhosa é pensar em como resolver. Uma vez pensado no algoritmo que chega ao resultado esperado, se vamos implementá-lo em C ou em Java depende dos nossos conhecimentos e do tipo de aplicação em que o problema está inserido.

Post curto, só para introduzir o assunto. Vamos ficar por aqui hoje, embora eu tenha ficado com vontade de escrever muitas outras coisas. Recomendo, quem pretende seguir os posts sobre Algoritmos, que baixe o programa DEV C++ de graça no site da Bloodsheed Software, observando se a versão dele é compatível com seu sistema operacional. Basicamente o DEV C++ é o programa que irá permitir compilar e rodar os programas que você criar em C. Por enquanto é isso. Vou ficar por aqui, pois estou com fome, e vou executar um algoritmo para fazer um molho branco para uma massa. Um abraço e vamos, juntos, estudar e desbravar um pouco do vasto mundo da PROGRAMAÇÃO. Até nossa próxima aventura...


Imagem meramente ilustrativa...

sábado, 16 de fevereiro de 2013

Blog Parado

Bom, eu tenho visto que existem pessoas que leem este blog, o que me deixa aliviado, por que caso ninguém lesse o blog, eu estaria escrevendo um monte de coisas pra nada. Mas enfim, como podem ver, o blog está meio parado. Isso tem dois motivos: tenho estado muito ocupado com trabalho e estudos, e não tenho tido boas ideias para posts.

Se vocês quiserem ajudar, há dois jeitos. Virem resolver meus problemas para mim, ou dar ideias do que vocês gostariam de ler aqui no blog. Caso escolham a segunda opção, por favor, deixem um comentário com alguma ideia. Eu tenho visto que os posts sobre associação de resistores fazem sucesso... mas e aí? O que você quer ler? Deixe sua ideia neste post!

Eu respondo o post em até 1 dia, geralmente, pois sempre olho o blog. Então você com certeza receberá feedback de sua opinião. Abraço e continuem estudando.

domingo, 27 de janeiro de 2013

De Luto por Santa Maria

Hoje ocorreu uma tragédia, o incêndio na boate Kiss em Santa Maria. Até o momento foram contabilizadas cerca de 240 vítimas fatais...

240 pessoas mortas. 240 histórias que tiveram um fim naquele lugar. Para quem morre, a dor acaba. Para quem fica, a dor é interminável, insuportável. São pais que perderam as crianças que criaram e educaram com tanto amor e carinho. Amigos que perderam gente querida. A mãe desesperada que, ao ouvir a notícia, liga incessantemente para o filho para saber seu paradeiro e lá, no local do incidente, um celular toca no bolso de um corpo sem vida.

Para mim é fácil escrever esse texto, sentado ao meu computador. Estou bem, as pessoas que amo estão bem. Por mais que eu tente, seria impossível imaginar a dor sentida. Mas na medida em que minha ignorância me permite, eu desejo muita força aos que perderam seus entes queridos.

Que todas essas almas possam descansar em paz...