domingo, 31 de maio de 2015

C++ comandos de decisão: If, if/else

Os comandos if, if-else são comandos de decisão utilizadas nas linguagens de programações. Através destes comandos e informações obtidas, o programa decide se faz algo, ou se faz outra coisa.

No código abaixo, o programa pede duas informações que são a inserção de dois números por parte do usuário. Depois de inserido os números o programa confere se o número 1 é maior do que o número 2, e se for, exibe a mensagem: numero 1 MAIOR DO QUE numero 2


Se o usuário inserir um número maior na variável num2 o programa encerra sem nada fazer. Se quiser fazer outra comparação, se a variável num2 recebeu uma número maior do que a variável num1, pode-se fazer deste modo.


Neste código acima, o número maior será sempre apontado, não importando se foi na variável num1 ou na variável num2.

Neste outro código abaixo, foram utilizados 3 vezes a função if para fazer comparações quando ocorrer igualdade, quando num1 maior do que, e quando num2 maior do que.





domingo, 24 de maio de 2015

12 de 24 Exercícios Propostos: Tipo cadeia de caracteres (string) que utilizam comandos if, else, for, funções da linguagem C; includes.

Em minha opinião, uma boa maneira de aprender a programar, é saber como outros programadores realizam e codificam. Conhecer como eles pensam por meio do estudo de seus códigos.

Este texto contem 12 códigos do Professor: Omero Francisco Bertol, M.Sc. que ministra a Disciplina: Estrutura de Dados, Pesquisa e Ordenação (Programando em C).

Todos os códigos abaixo e as questões são do referido professor. Observe como ele escreve os códigos, e como, desenvolve a lógica para as soluções das perguntas abaixo.

01 - Exibir na tela os caracteres da tabela de códigos ASCII (American Standard Code for Information Interchange).


02 - Declarar uma variável do tipo string e a seguir atribuir as letras maiúsculas do alfabeto as primeiras vinte e seis posições da variável.


03 - Declarar uma variável do tipo string e a seguir atribuir as letras minúsculas do alfabeto as primeiras vinte e seis posições da variável.


04 - Declarar uma variável do tipo string e a seguir atribuir os caracteres numéricos as primeiras dez posições da variável.


05 - Escreva um programa que calcule e escreva a quantidade de vezes que a letra ‘a’ aparece em uma frase fornecida pelo usuário.


06 - Fazer um programa para contar quantos espaços em branco existem em uma frase fornecida pelo usuário.


07 - Escreva um programa que calcule e escreva a quantidade de letras maiúsculas de uma frase fornecida pelo usuário.



08 - Escreva um programa que conta e exibe, separadamente, a quantidade de caracteres alfabéticos e de dígitos numéricos existentes em uma frase fornecida pelo usuário.


09 - Escreva um programa que conta e exibe a quantidade de vezes que cada vogal ocorre em uma frase fornecida pelo usuário.




10 - Escreva um programa que imprima o número de consoantes de uma cadeia de caracteres.




11 - Escreva um programa que obtenha uma frase e uma letra e a seguir escreva a quantidade de vezes que a letra ocorre na frase.


12 - Escreva um programa para ler uma frase e um caractere. Sempre que o caractere lido aparecer na frase ele deve ser substituído por asterisco. Por exemplo se os valores fornecidos fossem para a frase: o dia esta nublado, e para o caractere: a, o programa deverá fornecer o seguinte resultado: o di* est* nubl*do.

sexta-feira, 15 de maio de 2015

C++ trabalhando com String e funções de String.

Escreva um programa que leia um caractere digitado pelo usuário e uma frase também digitada pelo usuário e conte quantas vezes o caractere digitado aparece na frase. Por exemplo, se o usuário digitar 'a' e a frase “a aranha morreu.” seu programa deve retornar o número de letras 'a' contidos na frase, ou seja 4.

Primeiro minhas criticas ao sistema educacional.

Eu acho uma tremenda sacanagem dos professores de programação que, em sua maioria, jogam o assunto para o aluno ir buscar solução. Eu concordo com meu pai quando diz e repete sempre: num passado não tão distante, os professores primeiro ensinavam; depois passavam exercícios; tiravam as dúvidas; e por fim cobravam.

Hoje não é mais assim não! Não ensinam. Passam aos exercício a condição de INSTRUIR, ensinar, desenvolver o conteúdo no aluno. Como é que se aprende, se, quem sabe não está disposto e não tem o compromisso de ensinar?

Fim da crítica.

A solução para o problema proposto exige que o estudante da linguagem C estude e conheça:
  • As funções de String da linguagem.
  • Saber usar o For ou While;
  • Noções básicas de vetores
São estes três itens acima listados que você tem que estudar. Um bom livro para isto é Treinamento em Linguagem C++, volume 1 e volume 2. Se você quer uma cópia me peça nos comentários. Tudo tem um preço. Não envio nada de graça para ninguém. 
No livro acima citado, veja esta explicação sobre String em C++.
O que isto quer dizer para o iniciante? Na maioria das vezes NADA! Quem está iniciando não entende estes parágrafos acima. Então deixa eu explicar diferente. É o seguinte, quando você está programando em C++, e que declara uma variável do tipo Matriz ou Vetor de String, o C++ transforma a frase em uma série de caracteres. Deixa eu desenhar. Desenhando fica muito melhor.

Didaticamente é isto ai na imagem. Cada espaço em preto na imagem é o "caractere zero" que está no texto do livro. Em cada espaço preto, é um ZERO para dizer que ai termina um série e começa outra.

Outro ponto importante é a frase final: "Cada caractere é um elemento independente da matriz e pode ser acessado por meio de um índice." 
O código abaixo conta o  tamanho da frase digitada, e conta a quantidade de vogais 'a' ou 'A' digitada na frase.

 Explicação do código
  • As variável "char frase[100]" indica que está sendo criando uma matriz de caracteres que pode conter até 100 letras.
  • A variável contarA é de inteiro e vai contar na frase as vezes que a vogal 'a' foi digitada;
  • A variável i, é utilizada para percorrer a matriz frase[100] até o total que é obtido pela função strlen(frase);
  • A função strlen() faz parte das funções do C, e exige que o programado faça a chamada #include <string.h> no cabeçalho;
  •  A função gets(variável) é utilizada por que ela permite ESPAÇOS;
Como é que funciona?

 O programa pede que o usuário digite uma frase. O usuário digita. A instrução "tamanhoFrase = strlen(frase);" conta a quantidade ou o tamanho ou o total de letras digitadas pelo usuário. O máximo que é permitido é 100 letras. Poderia ser mais, evidente.

Obter este total será útil para o comando for (...) percorrer a matriz de zero até o tamanho da Frase. Veja o código:
for (i=0; i<tamanhoFrase; i++)
          {
            if ((frase[i] == 'a') || (frase[i] == 'A'))
                  contarA = contarA + 1;
          }  
Estas instruções do programa que é um laço de repetição do tipo for(...) começa com a variável i=0 e vai REPETIR até o tamanho da Frase, que foi obtido por strlen(frase). Então vem a condição if que que faz o seguinte:

- Se na variável frase[i] == 'a' OU na variável frase[i] == 'A' então, a variável contarA somará 1; Onde é que entra a variável i de frase[i]? Pra que é que serve este [i] entre colchetes?

A matriz de string frase[100] é transformada, didaticamente ilustrando, como está abaixo: Vê ali, onde é que entra a variável [i]? Olhe a seta vermelha. É! Ele é o que se chama de índice ou número da coluna, ou, quando em duas dimensões, poderá ser linhas.


Pegando este exemplo acima, a variável frase[i] quando começa, encontra a vogal 'e'; veja na imagem o valor de i que é 0,1,2,3,4,5,6 ... até 29,30,31. Ou seja, o tamanho desta frase é 32 caracteres com os espaços, e desta frase, olhe que tem a letra 'a' no índice, veja a seta vermelha que aponta o 'i' que está no for(i=0;....) nas seguintes casas: 3, 7, 25, 27 que totaliza 4 vezes a letra 'a'.

Terminando. O pedido é que o usuário irá digitar UMA LETRA e o programa vai contar a letra digitada. Veja estas mudanças.


O que é que tem de diferente? As funções toupper e tolower que servem para procurar a letra se está em minúsculo ou se existe a letra em Maiúsculo. A condição if usada no código acima significa o seguinte:

- SE em frase[i], ou seja, em frase[0] contiver toupper(buscarLetra), a letra digitada em minúsculo OU se em frase[i], ou seja, em frase[0] contiver tolower(buscarLetra), a letra digitada em maiúsculo... então, a variável contarA somará 1.

E o comando for (...) vai repetir esta ação até percorrer todas as posições da matriz.

Aproveite os exemplos acima e responda este outro exercício que tem aparecido em vários cursos.

Escreva um programa que leia uma frase (use a função gets( ) para ler a frase) e conte a quantidade de caracteres 'b' e caracteres 'e' contidos na frase digitada. Apresente também o número total de caracteres (usando a função strlen( ) ).


quinta-feira, 14 de maio de 2015

C++ exemplos de uso do comando For(...)

Este blog é uma maneira que tenho de fixar os conteúdos que estudei. Se você não tem o hábito ou não tem tempo para estudar, aprender, e fixar os conhecimentos, você certamente será escravo da releitura, reaprendizagem, e da circulo vicioso de ter que fazer e refazer as tarefas. Eu sigo a tradição antiga de repetir, repetir, repetir até que eu saiba e mesmo passando algum tempo, ainda saberei o que fiz.

No campo dos estudos dos algoritmos, da programação, os iniciantes sempre se deparam com perguntas do tipo: como uso isto? e como é que isto funciona? Como é que isto é usado no dia a dia do programador?

Exemplo de pergunta que já me fizeram: Como é que faz para usar o comando for (...), e para que serve o for (...)? Demonstre o uso do for (...) para mim. 

Eis abaixo exemplos de for (...).

O comando for (...) é denominado de comando de repetição. É o que todo manual de programação diz. Para quem tá começando os estudos de C++ não fica claro a ideia do que é, e como é que faz.Pra que é que serve o comando for (...) Veja estes exemplos:

Exemplo 1: Faça um algoritmo que mostre os números de 1 até 10 na tela.

Este é um exemplo de que você pode usar o comando for (...)  para repetir uma instrução xis vezes. Veja o código abaixo.

O programa é simples e faz isto somente isto: vai repetir a instrução: cout << "Numero ...: " até, ou melhor, enquanto a variável numero for menor ou no máximo seja igual a 10. 
  • O programa faz a 1ª vez. A variável número vale 1; escreve a frase "Numero ...: " e repete o valor da variável número; 
  • O programa repete 2ª vez. A variável número vale 2; escreve a frase "Numero ...: " e repete o valor da variável número; 
  • E repetirá enquanto a variável número seja menor que 10 ou no máximo que a variável número seja igual a 10.

Exemplo 2: Usando uma variável para determinar a quantidade de vezes que o comando for, repetirá;


Neste exemplo acima, se observa que a variável "quantasVezes" é introduzida num dialogo com o usuário. O algoritmo pergunta ao usuário "quantas vezes" ele quer repetir a estrutura que está marcada no quadrado azul. Óbvio que para você testar este código, você coloca números pequenos (3, 4, 5) para saber se de verdade, o programa repete a quantidade de vezes que você digitou.

Assim se você responder à pergunta "Quantas vezes repetir?" com 10, o comando for (...) vai começar a contar em 1, e vai repetir as instruções até o valor que você digitou para a variável "quantasVezes".

Veja o exemplo que fiz, logo abaixo, em que eu respondi 5, e o programa repetiu 5 vezes para eu digitar o nome, e 5 vezes pediu para eu digitar uma idade.

Quantas vezes repetir? 5
Digite seu nome: Maria
Digite sua idade: 12

Digite seu nome: Joao
Digite sua idade: 14

Digite seu nome: Pedro
Digite sua idade: 54

Digite seu nome: Quesia
Digite sua idade: 34

Digite seu nome: Katia
Digite sua idade: 32


--------------------------------
Exemplo 3: Usando o comando for (...) de dois em dois

Neste exemplo acima, o código instrui a começar a variável número em zero; vai repetir enquanto a variável número, não for igual a 100, ou enquanto a variável número for menor do que 100; e a variável número será acrescida de 2 todas as vezes que o comando for (...) executar; Por lógica, a primeira vez, número=0; a segunda vez, número=2; depois 4, 6, 8... e vai repetir até 100, que é o número máximo =100

Exemplo 4: Usando o comando for (...) diminuindo como uma contagem regressiva.

Não muda muita coisa não. Só muda o seguinte: a inversão dos valores da variável número; para contar de 1 até 10, se instrui o comando for(...) como: for(numero=1; ...; e quanto é para decrescer, coloca o número máximo na declaração: for(numero=10; ... E no final o sinal de menos;menos (--) para indicar, diminuir 1. Se exigir que se diminua 2, é só colocar dois ai assim: -=2

Exemplo 5: Usando o comando for (...) para calcular os termos de uma P.A

Para esta última eu tive que estudar a fórmula de P.A no site Educação.Uol.

quinta-feira, 7 de maio de 2015

Algoritmo em C++ que calcular o valor de uma conta de energia e aumenta o imposto em 17%

Faça um algoritmo em C++ em que o usuário irá digitar o valor da leitura de energia do mês atual, receberá também um valor da leitura do mês anterior; pedirá o usuário para digitar o valor cobrado por cada quilowatts e em seguida calculará o valor da conta; e acrescentará 17% no total da conta de imposto.

Pra você que não entende o motivo pelo qual os professores pedem para você resolver estes exercícios a explicação é simples: você tem que entender o uso das variáveis, expressões matemáticas, lógica, solução de problemas simples. 

Sem saber responder a estas pequenas sugestões de algoritmos ficará muito difícil para você entender outros conceitos úteis e que são de uso constantes na vida de um profissional de programação. Nada mais do que isto e simplesmente isto.

Você tem que saber usar variáveis, manipulá-las, criar fórmulas, executar expressões matemáticas e de lógica.
 

terça-feira, 5 de maio de 2015

Ordenando números usando variável auxiliar


Alguns alunos de cursos de programação recebem exercícios e tem que se virar para entender a lógica, desenvolver o algoritmo, e, é exigido dos alunos em iniciação certa maturidade e condição de solução de problemas que eles, certamente não tem. Um dos exercícios que muito me fez quebrar a cabeça para entender foi este em que era assim solicitado.

Crie um algoritmo em C++ que, solicite três números ao usuário. Depois de digitado, o algoritmo terá que ordenar estes números do menor para o maior.
 

Para quem está iniciando esta atividade de programar, não saber resolver questões assim, desestimula no prosseguimento do curso. E, há professores que fazem questão de dificultar mais ainda, que é para, segundo eles, peneirar os mais valentes na arte da programação. Eu chamo isto de outros adjetivos. Pois bem! Adiante! Eis abaixo a solução do algoritmo.




Depois de muito matutar e fazer um monstrengo de código, fiz o código acima. É um exercício para fazer com que você aprenda a manipular variáveis de um lugar para outro; é um exercício que tem como proposta ajudar o aluno a entender como é fácil, pegar um valor que está ali, levar pra lá, trazer para acolá.

O primeiro IF que é if(a>b) é muito simples de entender. Se o número na variável "a" for maior do que a variável que está em "b", acontece o seguinte evento:
  1. Variável auxiliar pega o valor que está em a;
  2. Variável "a", que foi para a variável auxiliar (aux) recebe o valor que está em b;
  3. Variável "b", recebe o número maior que estava em "a" e que foi transferida temporariamente para a variável auxiliar.
O processo acima se repete nas outras duas ações.