Você está na página 1de 11

Definio de Lgica

O uso corriqueiro da palavra lgica est normalmente relacionado coerncia e racionalidade. Frequentemente se associa lgica apenas matemtica, no se percebendo sua aplicabilidade e sua relao com as demais cincias. Podemos relacionar a lgica com a correo do pensamento, pois uma de suas preocupaes determinar quais operaes so vlidas e quais no so, fazendo anlises das formas e leis do pensamento. Com arte ou tcnica, ela nos ensina a usar corretamente as leis do pensamento. Poderamos dizer tambm que a lgica a "arte de bem pensar", que a "cincia das formas do pensamento". Visto que a forma mais complexa do pensamento o raciocnio, a lgica estuda a "correo do raciocnio". Podemos ainda dizer que a lgica tem em vista a "ordem da razo". Isso d a entender que a nossa razo pode funcionar desordenadamente. Por isso, a lgica estuda e ensina a colocar "ordem no pensamento".

Definio de Lgica de Programao


Significa o uso correto das leis do pensamento, da "ordem da razo" e de processos de raciocnio e simbolizao formais na programao de computadores, objetivando a racionalidade e o desenvolvimento de tcnicas que cooperem para a produo de solues logicamente vlidas e coerentes, que resolvam com qualidade os problemas que se deseja programar. O raciocnio algo abstrato, intangvel. Os seres humanos tm capacidade de express-lo atravs da palavra falada ou escrita, que por sua vez se baseia em um determinado idioma, que segue uma srie de padres (gramtica). Um mesmo raciocnio pode ser expresso em qualquer um dos inmeros idiomas existentes, mas continuar representando o mesmo raciocnio, usando apenas outra conveno. Algo similar ocorre com a Lgica de Programao, que pode ser concebida pela mente treinada e pode ser representada em qualquer uma das inmeras linguagens de programao existentes. Essas, por sua vez, so muito atreladas a uma grande diversidade de detalhes computacionais, que pouco tm a ver com o raciocnio original. Para escapar dessa torre de babel e, ao mesmo
1

tempo, representar mais fielmente o raciocnio da lgica de programao, utilizamos os algoritmos.

Algoritmos
O objetivo principal do estudo da lgica de programao a construo de algoritmos coerentes e vlidos. Mas o que um algoritmo? Um algoritmo pode ser definido como uma sequencia de passos que visam a atingir um objetivo bem definido. Na medida em que precisamos especificar uma sequencia de passos, necessrio utilizar ordem, ou seja, "pensar com ordem", portanto precisamos utilizar lgica. Apesar do nome pouco usual, algoritmos so comuns em nosso cotidiano, como, por exemplo, uma receita de bolo. Nela est descrita uma srie de ingredientes necessrios e uma sequencia de diversos passos (aes) que devem ser fielmente cumpridos para que se consiga fazer o alimento desejado, conforme se espera antes do incio das atividades (objetivo bem definido). Quando elaboramos um algoritmo, devemos especificar aes claras e precisas, que a partir de um estado inicial, aps um perodo de tempo finito, produzam um estado final previsvel e bem definido. Isso significa que o algoritmo fixa um padro de comportamento a ser seguido, uma norma de execuo a ser trilhada, com vistas a alcanar, como resultado final, a soluo de um problema, garantindo que sempre que executado, sob as mesmas condies, produza o mesmo resultado.

Tipos de Dados
Tipo primitivo: So tipos de dados predefinidos pela linguagem e correspondem a dados mais simples ou escalares. Os tipos primitivos utilizados por um computador so numricos (inteiros ou reais), caracteres e lgicos. Tipo de inteiros os excluindo-se tipo real). referenciado Dado Inteiro: So caracterizados como tipos dados numricos positivos ou negativos, destes qualquer nmero fracionrio (nmeros do Em linguagem C, este tipo de dado pode ser por um dos seguintes identificadores:

Tipo Inteiro int long (int) unsigned int unsigned long (int)

Mnimo -32.768 -2.147.483.648 0 0

Mximo 32.767 2.147.483.647 65.535 4.292.967.295

Tipo de Dado Real: So caracterizados como tipos reais os dados numricos positivos, negativos e nmeros fracionrios e tambm inteiros. Em linguagem C, este tipo de dado pode ser referenciado por um dos seguintes identificadores: Tipo Inteiro float double long double Mnimo 3.4 e-38 1.7 e-308 3.4 e-4932 Mximo 3.4 e+38 1.7 e+308 1.1 e+4932

Tipo de Dado Caractere: So caracterizados como tipo caractere letras (a..z, A..Z), nmeros (0..9) e smbolos especiais (! @ # $ % ^...) delimitados entre os smbolos de aspas simples (' '), para as sequencias (Strings) de letras, nmeros e smbolos especiais, utilizamos aspas duplas (" "). Este tipo de dado referenciado pelo identificador: char, podendo armazenar caracteres da tabela ASCII de 0 at 255. Tipo de Dado Lgico: A Linguagem C no possui um tipo de dado lgico ou booleano, ou seja, no existe valor lgico "Falso" ou "Verdadeiro" para um determinado tipo de dado, de forma predefinida. EM linguagem C qualquer valor igual a 0 (zero) considerado um valor lgico do tipo falso, e qualquer valor diferente de zero, ser considerado um valor lgico verdadeiro.

Uso de Variveis e Constantes


Constante: Uma constante qualquer dado que no sofre alterao ou variao durante a execuo de um programa, ou seja, seu valor constante do incio at o fim da execuo. Varivel: Uma varivel representa a unidade bsica de armazenamento temporrio de dados e composta por um tipo, um identificador (nome), um tamanho e um valor.

O objetivo de uma varivel armazenar um dado de determinado tipo primitivo, podendo ser alterado durante a execuo do programa. Exemplo: int notaAluno = 8 Valor

Tipo

Nome

Tamanho: 4 bytes -32.768 at 32.767

Operadores e Expresses Matemticas Computacionais


Operadores Matemticos: so utilizados para a realizao de operaes matemticas com operandos de tipos numricos, do mesmo modo como so aplicados na lgebra. Operao + * / % Funo Adio Subtrao Multiplicao Diviso Mdulo (resto da diviso)

Geralmente o operador de mdulo (%) menos conhecido do que os operadores de multiplicao e diviso. Este operador retorna o resto de uma diviso. Exemplo: 10 |3 1 3 Resto da Diviso Em linguagem C, a sintaxe a seguinte: int a; a = 10 % 3;

Comandos de Leitura e Escrita


Os programas precisam receber dados provenientes do meio externo para poderem efetuar operaes e clculos necessrios a fim de alcanar o resultado desejado. Do mesmo modo, o resultado final deve ser devolvido ao meio externo. Com essa finalidade, utilizamos comandos de entrada e sada.

Entrada de dados: Para que o programa possa receber dados de que necessita, iremos utilizar a funo scanf(), cuja finalidade efetuar entrada de dados via teclado. A sintaxe desta funo se caracteriza por ser uma expresso de controle seguida de uma lista de argumentos separados por vrgula, sendo que seus argumentos so endereos de variveis. scanf("expresso de controle", "lista de args"); A expresso de controle se caracteriza por conter cdigos de formatao para o tipo de dado a ser processado, precedidos pelo sinal de percentagem %. Veja a seguir, a tabela com os cdigos de formatao para a funo scanf(). Formatao %c %d %e %f %ld %lf %o %s %u %x Descrio apenas um caractere nmeros inteiros nmeros em notao cientfica nmeros reais (ponto flutuante) nmeros inteiros longos nmeros reais longos (double) nmeros octais um conjunto de caracteres (String) nmeros decimais sem sinal nmeros hexadecimais

Leitura Leitura Leitura Leitura Leitura Leitura Leitura Leitura Leitura Leitura

de de de de de de de de de de

A lista de argumentos a indicao dos endereos das variveis em uso, por meio do operador de endereo &, que possibilita retornar o contedo da varivel. Caso no seja usado o operador de endereo &, ser retornado o endereo de memria em que se encontra a varivel. Exemplo:
#include <stdio.h> int main(int argc, char *argv[]) { int a; float b; char string[64]; printf("Digite um nmero inteiro: "); scanf("%d", &a); printf("Digite um nmero em ponto flutuante: "); scanf("%f", &b); printf("Digite uma frase: "); scanf("%s", &string); getch(); }

Sada de dados: Para que o programa possa mostrar os dados que processou, como resposta ao problema que resolveu, usaremos a funo printf(), cuja finalidade efetuar a sada de informaes no vdeo. A sintaxe desta funo : printf("expresso de controle", "lista de argumentos"); A expresso de controle se caracteriza por conter cdigos de formatao para o tipo de dado a ser processado, precedido pelo sinal de percentagem %. Veja abaixo a tabela com os cdigos de formatao para a funo printf(). Formatao %c %d %e %f %o %s %u %x Exemplo:
#include <stdio.h> int main(int argc, char *argv[]) { int a; float b; char string[64]; printf("Digite um numero inteiro: "); scanf("%d", &a); printf("Digite um numero em ponto flutuante: "); scanf("%f", &b); printf("Digite uma frase: "); scanf("%s", &string); a = a + 10; b = b + 0.5; printf("A variavel a foi acrescida em 10: %d\n", a); printf("A variavel b foi acrescida em 0.5: %f\n", b); printf("A variavel string recebeu a frase: %s\n", string); getch(); }

Escrita Escrita Escrita Escrita Escrita Escrita Escrita Escrita

de de de de de de de de

Descrio apenas um caractere nmeros inteiros nmeros em notao cientfica nmeros reais (ponto flutuante) nmeros octais um conjunto de caracteres (String) nmeros decimais sem sinal nmeros hexadecimais

Operadores Relacionais
Os operadores relacionais possibilitam comparar valores ou expresses retornando sempre um resultado lgico true (verdadeiro) ou false (falso). Em linguagem C, um resultado lgico false ser interpretado como 0 (zero). J um resultado lgico true ser interpretado como algo diferente de 0 (zero). A tabela abaixo resume disponveis na linguagem C. Operador == != > < >= <= os operadores Funo Igual a Diferente de Maior que Menor que Maior ou igual a Menor ou igual a destes relacionais

O programa abaixo exemplifica a utilizao operadores relacionais para tipos primitivos.


#include <stdio.h> int main(int argc, char *argv[]){ int it1 = 10, it2 = 15, it3 = 10, it4 = 15; int b1, b2, b3, b4, b5, b6, b7, b8; b1 = it1 == it2; printf("it1 == it2 eh: %d\n", b1); b2 = it1 == it3; printf("it1 == it3 eh: %d\n", b2); b3 = it1 != it2; printf("it1 != it2 eh: %d\n", b3); b4 = it1 != it3; printf("it1 != it3 eh: %d\n", b4); b5 = it2 > it4; printf("it2 > it4

eh: %d\n", b5);

b6 = it2 >= it4; printf("it2 >= it4 eh: %d\n", b6); b7 = it3 < it4; printf("it3 < it4

eh: %d\n", b7);

b8 = it2 <= it4; printf("it2 <= it4 eh: %d\n", b8); getch(); }

Sada gerada pela execuo do programa acima: it1 it1 it1 it1 it2 it2 it3 it2 == it2 == it3 != it2 != it3 > it4 >= it4 < it4 <= it4 eh: eh: eh: eh: eh: eh: eh: eh: 0 1 1 0 0 1 1 1

Operadores Lgicos
Utilizamos trs operadores bsicos para a formao de novas proposies lgicas compostas a partir de outras proposies lgicas simples. Os operadores lgicos esto descritos na tabela abaixo. Operador no e ou Funo Negao Conjuno Disjuno

Tabela Verdade: o conjunto de todas as possibilidades combinatrias entre os valores de diversas variveis lgicas, as quais se encontram em apenas duas situaes (V ou F), e um conjunto de operadores lgicos. Construiremos uma tabela verdade com o objetivo de dispor de uma maneira prtica os valores lgicos envolvidos em uma expresso lgica. Operao de Negao A V F no A F V

Operao de Conjuno A V V F F B V F V F A e B V F F F

Operao de Disjuno A V V F F B V F V F A ou B V V V F

Operadores Lgicos na Linguagem C


Os operadores lgicos so utilizados para construir expresses que retornam um resultado zero (false) ou diferente de zero (true). A linguagem C fornece operadores lgicos que podem ser utilizados para formar condies mais complexas combinando condies simples. A tabela abaixo resume disponveis na linguagem C. Operador || && ! os operadores lgicos

Funo ou (or) lgico condicional e (and) lgico condicional negao (not)

Operador Lgico condicional E (&&) Para o operador && o operando da direita somente avaliado se o operando da esquerda for avaliado verdadeiro. ser como

Operador Lgico condicional OU (||) Para o operador || o operando da direita somente ser avaliado se o operando da esquerda for avaliado como falso.

O programa C abaixo exemplifica a utilizao operadores lgicos condicionais para tipos primitivos.
#include <stdio.h> #include <conio.h> int main(int argc, char *argv[]) { int a = 5, b = 7, c = 10; int b1, b2, b3, b4; b1 = (a > 3) && (b < 8); printf("(a > 3) && (b < 8): %d\n", b1); b2 = (a > 3) && (b < 8) || (c < 20); printf("(a > 3) && (b < 8) || (c < 20): %d\n", b2); b3 = (a > 3) || (b > 8) && (c < 20); printf("(a > 3) || (b > 8) && (c < 20): %d\n", b3); b4 = !(c > 5 || !(b > 10)); printf("!(c > 5 || !(b > 10)): %d\n", b4); getch(); }

dos

Abaixo temos a sada gerada pelo programa acima: (a > 3) (a > 3) (a > 3) !(c > 5 && && || || (b < 8): 1 (b < 8) || (c < 20): 1 (b > 8) && (c < 20): 1 !(b > 10)): 0

Vamos analisar mais um exemplo da utilizao dos operadores lgicos


#include <stdio.h> #include <conio.h> int op1(){ printf("Dentro de op1\n"); return 0; } int op2(){ printf("Dentro de op2\n"); return 1; } int main(int argc, char *argv[]){ printf("==== Testando o operador && =======\n\n"); if (op1() && op2()) printf("Ambos verdadeiros\n"); else printf("Um dos operandos eh falso\n"); printf("\n\n==== Testando o operador || =======\n\n"); if (op1() || op2()) printf("Um dos operandos eh verdadeiro\n"); else printf("Ambos sao falsos\n");

10

getch(); }

Comando de Atribuio
Um comando de atribuio permite-nos fornecer um valor a uma varivel (guardar um valor em uma gaveta), em que o tipo do dado deve ser compatvel com o tipo da varivel, isto , somente podemos atribuir um valor inteiro a uma varivel capaz de comport-lo, ou seja, uma varivel declarada como sendo do tipo inteiro.

11