Mudanças entre as edições de "PRG1-2014-1-Engenharia Programação 1 - Engenharia"
(→EMENTA) |
|||
Linha 539: | Linha 539: | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | {{collapse top|AULA 3 DIA 22/02/2014}} | ||
+ | |||
+ | == AULA 3 DIA 22/02/2014== | ||
+ | |||
+ | ===Objetivos=== | ||
+ | |||
+ | O aluno devera ser capaz de: | ||
+ | |||
+ | * descrever o processo de compilação; | ||
+ | * diferenciar código fonte, objeto e executável; | ||
+ | * compilar, executar pequenos programa em C usando o gcc; | ||
+ | * declarar e usar variáveis locais inteiras e reais; | ||
+ | * usar as funções de entrada e saída: ''scanf()'' e ''printf''. | ||
+ | |||
+ | === Possíveis linguagens de programação === | ||
+ | |||
+ | Na prática, é inviável desenvolver programas complexos em | ||
+ | LINGUAGEM DE MÁQUINA. | ||
+ | Em geral, utilizamos linguagens de ALTO NÍVEL que podem, de | ||
+ | alguma forma, serem traduzidas (compiladas) para a linguagem | ||
+ | de baixo nível ou interpretadas em tempo de execução. | ||
+ | |||
+ | Exemplo: | ||
+ | |||
+ | * Linguagem C | ||
+ | * Fortran | ||
+ | * Basic | ||
+ | * C++ | ||
+ | * Pascal | ||
+ | * Java | ||
+ | * Python | ||
+ | |||
+ | Neste curso utilizaremos a linguagem C. Por que? | ||
+ | É uma linguagem muito usada na implementação de produtos | ||
+ | eletrônicos, incluindo àqueles voltados as Telecomunicações. | ||
+ | |||
+ | ===Introdução a linguagem C === | ||
+ | |||
+ | *[http://pt.wikipedia.org/wiki/C_%28linguagem_de_programa%C3%A7%C3%A3o%29#Hist.C3.B3ria Histórico] | ||
+ | |||
+ | |||
+ | <center>{{#ev:youtube|rGCbvqz6Kt4#!}} </center> | ||
+ | |||
+ | *[http://pt.wikipedia.org/wiki/C_%28linguagem_de_programa%C3%A7%C3%A3o%29#Vis.C3.A3o_geral Características da Linguagem] | ||
+ | * O C K&R (uma especificação informal da linguagem) e o [http://www.ansi.org/ ANSI] C | ||
+ | * linguagem [http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_imperativa imperativa] e [http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_procedural procedural]. | ||
+ | |||
+ | ===Visão geral do processo de compilação com gcc === | ||
+ | |||
+ | * Linguagens compiladas (ex: C) versus linguagens interpretadas (ex: Basic) | ||
+ | |||
+ | [[imagem:ProcessoCompilacao.jpg|700px]] | ||
+ | |||
+ | |||
+ | === Compilando um programa C=== | ||
+ | |||
+ | Neste curso usaremos o compilador da coleção [http://en.wikipedia.org/wiki/GNU_Compiler_Collection gcc] do [http://en.wikipedia.org/wiki/GNU_Project projeto GNU]. | ||
+ | O manual completo do gcc pode ser encontrado [http://gcc.gnu.org/ aqui]. | ||
+ | |||
+ | O processo de desenvolvimento do programa envolve: | ||
+ | |||
+ | *Editar o programa com um editor de texto tal como o ''vi'' ou ''gedit''; | ||
+ | *Salvar o programa com a terminação ".c" (ou ".h" se for um cabeçalho); | ||
+ | |||
+ | |||
+ | NOTA: crie um diretório para trabalhar nos exercícios que se seguem: | ||
+ | mkdir ExerciciosC | ||
+ | cd Exercicios | ||
+ | |||
+ | Exemplo: salve o programa abaixo como teste.c | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | |||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | printf("Alo Mundo\n"); | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Compilar/gerar executável do programa usando o gcc: | ||
+ | |||
+ | gcc teste.c -o teste | ||
+ | |||
+ | *Testar o programa: | ||
+ | |||
+ | ./teste | ||
+ | |||
+ | Nota: o atributo -o permite que se forneça um nome para o executável diferente de a.out | ||
+ | |||
+ | É possível somente compilar (gerar código objeto): | ||
+ | |||
+ | gcc -c teste.c | ||
+ | |||
+ | Observe os subprodutos listando com detalhes: | ||
+ | |||
+ | ls -l | ||
+ | |||
+ | ===Estrutura do Programa em C=== | ||
+ | |||
+ | Um programa em C pode ser visto como um conjunto de uma ou mais funções: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | |||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | printf("Alo Mundo\n"); | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | No programa acima temos uma única função: a função ''main()'' | ||
+ | Uma função é um pedaço de código delimitado por chaves e com um nome. Todo programa C bem comportado deve ter um função ''main''. A primeira instrução desta função é o ponto de entrada do código do usuário. | ||
+ | |||
+ | A primeira instrução do programa acima é uma chamada a uma função da biblioteca: o ''printf()''. Esta função permite mostrar dados no terminal. | ||
+ | |||
+ | Não é possível colocar instruções fora de funções! | ||
+ | |||
+ | ===Declarando variáveis inteiras e reais locais=== | ||
+ | |||
+ | No "c" temos que declarar as variáveis que serão utilizadas no programa. | ||
+ | Se estas variáveis forem declaradas DENTRO da função elas serão "vistas" somente localmente | ||
+ | (escopo local). Este conceito será estendido para blocos de códigos posteriormente. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | /* aqui começam as declarações de variáveis */ | ||
+ | int x; /* declaração de uma variável inteira */ | ||
+ | float y; /* declaração de uma variável real */ | ||
+ | |||
+ | /* aqui começam as instruções do programa principal */ | ||
+ | x=5; /* atribuindo o valor 5 (constante) a variável x */ | ||
+ | y=6.5; | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | No exemplo anterior criamos duas variáveis : ''x'' e ''y''. Lembrando que variáveis podem ser vistas como um lugar que pode armazenar um valor. Para simplificar ainda mais, podemos imaginar a variável como uma CAIXA onde podemos armazenar um valor. A CAIXA possui um nome e um tipo. O nome IDENTIFICA a CAIXA enquanto o tipo da variável determina a natureza dos valores que podemos armazenar na CAIXA: | ||
+ | |||
+ | +-----+ | ||
+ | <nowiki>|</nowiki> 5 | x | ||
+ | +-----+ | ||
+ | |||
+ | A variável ''x'' é do tipo ''int'' e, portanto, está apta a armazenar valores inteiros. Já a variável y é do tipo float e está apta a receber valores reais. | ||
+ | |||
+ | +-----+ | ||
+ | <nowiki>|</nowiki> 6.5 | y | ||
+ | +-----+ | ||
+ | |||
+ | Observe que as instruções de atribuição acima envolvem constantes também. | ||
+ | |||
+ | ===Funções de entrada e saída de dados=== | ||
+ | |||
+ | No "c" não existe instrução especialmente para leitura ou saída de dados. Este procedimento é realizado através de funções da biblioteca. | ||
+ | Na sequência são mostradas duas funções "clássicas" de entrada e saída de dados: o ''printf()'' - já apresentado - e o ''scanf()''. Esta última função permite entrada de dados. | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | |||
+ | int x; /* declaração de uma variável inteira */ | ||
+ | float y; /* declaração de uma variável real */ | ||
+ | |||
+ | printf ("Entre com o valor de x "); | ||
+ | scanf("%d",&x); | ||
+ | |||
+ | printf ("Entre com o valor de y "); | ||
+ | scanf("%f",&y); | ||
+ | |||
+ | printf ("O valor de x é %d\n",x); | ||
+ | printf ("O valor de y é %f\n",y); | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Construindo expressões no C=== | ||
+ | |||
+ | ====Operador de Atribuição==== | ||
+ | |||
+ | O operador de atribuição ''='' é amplamente usado para atribuir valores para variáveis. | ||
+ | Veja o exemplo abaixo. Dois números do tipo float são lidos para as variáveis ''x'' e ''y'' e a média é calculada e colocada na variável média. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | float x,y; | ||
+ | float media; | ||
+ | |||
+ | printf("Entre com x\n"); | ||
+ | scanf("%f", &x); | ||
+ | printf("Entre com y\n"); | ||
+ | scanf("%f", &y); | ||
+ | media = (x+y)/2; | ||
+ | printf("Valor de media = %f\n",media); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Um diferencial do C com relação a outras linguagens é que a atribuição pode ser realizada várias vezes dentro de uma mesma instrução. Veja o exemplo: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | int x,y,w; | ||
+ | |||
+ | x=1; | ||
+ | w=y=x+1; | ||
+ | printf("x=%d y=%d w=%d\n", x,y,w); | ||
+ | |||
+ | w=2*(y=x+1); | ||
+ | printf("x=%d y=%d w=%d\n", x,y,w); | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | NOTE que o código: | ||
+ | w=2*y=x+1; | ||
+ | produz um erro de compilação: | ||
+ | erro: ''lvalue required as left operand of assignment'' | ||
+ | |||
+ | Ver conceito de lvalue e rvalue [http://en.wikipedia.org/wiki/Value_%28computer_science%29 aqui]. | ||
+ | |||
+ | O problema é que A ESQUERDA do sinal de atribuição sempre deve existir uma referência a uma área de memória (normalmente uma variável). A semântica da atribuição é copiar o valor computado a direita PARA a área referenciada a esquerda. | ||
+ | |||
+ | ====Operadores aritméticos==== | ||
+ | |||
+ | Já temos vistos expressões aritméticas com operadores básicos (+,-,*,/). Além destes operadores temos os seguintes: | ||
+ | |||
+ | {| border="1" cellpadding="2" | ||
+ | !Operador | ||
+ | !Significado | ||
+ | |- | ||
+ | |% | ||
+ | |resto de uma divisão | ||
+ | |- | ||
+ | |<nowiki>++</nowiki> | ||
+ | |incrementa o operando em uma unidade | ||
+ | |- | ||
+ | |<nowiki>--</nowiki> | ||
+ | |decrementa o operando em uma unidade | ||
+ | |} | ||
+ | |||
+ | Exemplo 1 | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | main() | ||
+ | { | ||
+ | int x,y; | ||
+ | printf("Entre com x\n"); | ||
+ | scanf("%d", &x); | ||
+ | y=x%2; | ||
+ | printf("resto x divido por 2 =%d\n",y); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Exemplo 2 | ||
+ | |||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | int x,y; | ||
+ | printf("Entre com x\n"); | ||
+ | scanf("%d", &x); | ||
+ | y=x++; | ||
+ | printf("Valor de y =%d e o valor de x = %d\n",y, x); | ||
+ | x=1; | ||
+ | y=++x; | ||
+ | printf("Valor de y =%d\n",y); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Exemplo 3 | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | main() | ||
+ | { | ||
+ | int x,y; | ||
+ | printf("Entre com x\n"); | ||
+ | scanf("%d", &x); | ||
+ | y=x--; | ||
+ | printf("Valor de y =%d\n",y); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Note que existe uma diferença entre | ||
+ | y = x--; | ||
+ | e | ||
+ | y = --x; | ||
+ | |||
+ | Exemplo 4 | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | int x,y; | ||
+ | |||
+ | x=1; | ||
+ | y = x+++x++; | ||
+ | printf("x=%d y=%d\n", x,y); | ||
+ | |||
+ | x=1; | ||
+ | y = ++x+x++; | ||
+ | printf("x=%d y=%d\n", x,y); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ====Operadores Relacionais e Lógicos==== | ||
+ | |||
+ | Os operadores relacionais e lógicos são os mesmos vistos na aula anterior. | ||
+ | |||
+ | {| border="1" cellpadding="2" | ||
+ | !Operador | ||
+ | !Significado | ||
+ | |- | ||
+ | |> | ||
+ | |maior que | ||
+ | |- | ||
+ | |>= | ||
+ | |maior ou igual que | ||
+ | |- | ||
+ | |< | ||
+ | |menor que | ||
+ | |- | ||
+ | |<= | ||
+ | |menor ou igual que | ||
+ | |- | ||
+ | |== | ||
+ | |igual a (se o operando a esquerda é maior que o da direita) | ||
+ | |- | ||
+ | |!= | ||
+ | |diferente de (se o operando a esquerda é diferente do da direita) | ||
+ | |} | ||
+ | |||
+ | |||
+ | {| border="1" cellpadding="2" | ||
+ | !Operador | ||
+ | !Significado | ||
+ | |- | ||
+ | |&& | ||
+ | |AND (E) | ||
+ | |- | ||
+ | |<nowiki>||</nowiki> | ||
+ | |OR (OU) | ||
+ | |- | ||
+ | |! | ||
+ | |NOT (NÃO) | ||
+ | |} | ||
+ | |||
+ | Ver [http://www.ead.cpdee.ufmg.br/cursos/C/c.html Operadores Relacionais e Lógicos] | ||
+ | |||
+ | === Comandos de decisão ''if()'' e ''if() else'' === | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | |||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | |||
+ | int x; /* declaração de uma variável inteira */ | ||
+ | int y; /* declaração de uma variável inteira */ | ||
+ | |||
+ | printf ("Entre com o valor de x "); | ||
+ | scanf("%d",&x); | ||
+ | |||
+ | printf ("Entre com o valor de y "); | ||
+ | scanf("%d",&y); | ||
+ | |||
+ | if (y>x) | ||
+ | printf("MSG1:y é maior que x\n"); | ||
+ | |||
+ | |||
+ | if (y>x) | ||
+ | printf("MSG2:y é maior que x\n"); | ||
+ | else | ||
+ | printf("MSG3:y é igual ou menor que x\n"); | ||
+ | |||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | Outro exemplo, usando blocos: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | |||
+ | int x,y,z; /* declaração de uma variável inteira */ | ||
+ | |||
+ | printf ("Entre com o valor de x "); | ||
+ | scanf("%d",&x); | ||
+ | |||
+ | printf ("Entre com o valor de y "); | ||
+ | scanf("%d",&y); | ||
+ | |||
+ | if (y>x) { | ||
+ | printf("MSG1: y é maior que x\n"); | ||
+ | z = y-x; | ||
+ | printf("MSG2: Neste caso z = %d\n", z); | ||
+ | } else { | ||
+ | printf("MSG3: y é igual ou menor que x\n"); | ||
+ | z = x-y; | ||
+ | printf("MSG4: Neste caso z = %d\n", z); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | No C, qualquer expressão que resulta em 0 é considerada FALSA e qualquer expressão com valor diferente de 0 é VERDADEIRA. | ||
+ | |||
+ | Exemplo: | ||
+ | <syntaxhighlight lang=c> | ||
+ | if (2) | ||
+ | printf("expressão sempre VERDADEIRA"); | ||
+ | if ('2') | ||
+ | printf("expressão sempre VERDADEIRA"); | ||
+ | if (1-1) | ||
+ | printf("expressão sempre FALSA"); | ||
+ | if (x=1) /* um erro comum - sinal de atribuição no lugar de == */ | ||
+ | printf("expressão sempre VERDADEIRA"); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Tipo Char=== | ||
+ | |||
+ | Uma variável do tipo caracter é tratada como um número inteiro e declarada com o tipo ''char'', que na prática é um número inteiro de byte. | ||
+ | |||
+ | Exemplo | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main () | ||
+ | { | ||
+ | char x='A',y=65,w=0x41,z; | ||
+ | |||
+ | scanf("%c",&z); | ||
+ | printf("Caracter lido = %c\n",z); | ||
+ | printf("Caracter lido = %d\n",z); | ||
+ | printf("Caracter lido = %x\n",z); | ||
+ | if (z==x) | ||
+ | printf("Iguais 1\n"); | ||
+ | if (z==y) | ||
+ | printf("Iguais 2\n"); | ||
+ | if (z==w) | ||
+ | printf("Iguais 3\n"); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | [http://www.vivaolinux.com.br/dica/Limpando-a-sujeirinha-no-buffer-do-teclado Limpando sujeira do teclado] | ||
+ | |||
+ | ===Indentação=== | ||
+ | [http://pt.wikipedia.org/wiki/Indenta%C3%A7%C3%A3o Indentação] | ||
+ | [http://en.wikipedia.org/wiki/Indent_style Estilos] | ||
+ | |||
+ | ===Exercícios=== | ||
+ | |||
+ | #Implementar um programa C que converte temperaturas de graus Fahrenheit para Celsius. | ||
+ | <!-- | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | float converter_fahreiheit_para_celsius (float temp_fahr) | ||
+ | { | ||
+ | /* melhorar - retornar -1000 se o valor do parâmetro for inválido */ | ||
+ | return ((temp_fahr-32)/1.8); | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | float temperatura_fahre, resultado_celsius; | ||
+ | printf("Entre com graus Fahrenheit -> "); | ||
+ | scanf ("%f", &temperatura_fahre); | ||
+ | resultado_celsius = converter_fahreiheit_para_celsius(temperatura_fahre); | ||
+ | printf("Conversao = %f\n", resultado_celsius); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | --> | ||
+ | #Implementar um programa que lê um número inteiro e imprime se o número é par ou ímpar. SUGESTÃO: Usar o operador de resto. | ||
+ | #Implementar um programa em C para ler dois números inteiros e imprimir uma mensagem indicando se os números lidos são iguais ou diferentes. Caso sejam diferentes, computar a média dos mesmos. | ||
+ | <!-- | ||
+ | <syntaxhighlight lang=c> | ||
+ | main() | ||
+ | { | ||
+ | int x,y; | ||
+ | float media; | ||
+ | |||
+ | printf("Entre com x\n"); | ||
+ | scanf("%d",&x); | ||
+ | printf("Entre com y\n"); | ||
+ | scanf("%d",&y); | ||
+ | if (x==y) | ||
+ | printf("números iguais\n"); | ||
+ | else { | ||
+ | printf("números diferentes\n"); | ||
+ | media = (x+y)/2.0; | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | --> | ||
+ | #Implementar um programa para ler 4 números inteiros e imprimir uma mensagem se a soma dos dois primeiros for igual ou menor a soma dos dois últimos. | ||
+ | <!--<syntaxhighlight lang=c> | ||
+ | main() | ||
+ | { | ||
+ | int num1,num2,num3,num4; | ||
+ | int soma1,soma2; | ||
+ | |||
+ | printf("Entre com num1\n"); | ||
+ | scanf("%d", &num1); | ||
+ | printf("Entre com num2\n"); | ||
+ | scanf("%d", &num2); | ||
+ | printf("Entre com num3\n"); | ||
+ | scanf("%d", &num3); | ||
+ | printf("Entre com num4\n"); | ||
+ | scanf("%d", &num4); | ||
+ | |||
+ | soma1 = num1+num2; | ||
+ | soma2 = num3+num4; | ||
+ | |||
+ | if(soma1<=soma2) | ||
+ | printf("Soma dos dois primeiros <= que a soma dos dois últimos\n"); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | --> | ||
+ | #Implementar um programa para ler dois números reais e, na sequência, um número inteiro. Se o número inteiro for 1 os dois números iniciais deverão ser somados, se for 2 eles serão subtraídos, se for 3 eles serão multiplicados e se for 4 serão divididos. Mostrar mensagem de erro se o número inteiro não estiver na faixa de 1 a 4. Mostrar mensagem caso a divisão não seja possível. | ||
+ | <!-- | ||
+ | <syntaxhighlight lang=c> | ||
+ | main() | ||
+ | { | ||
+ | float num1,num2; | ||
+ | int operacao; | ||
+ | |||
+ | printf("Entre com num1\n"); | ||
+ | scanf("%f", &num1); | ||
+ | printf("Entre com num2\n"); | ||
+ | scanf("%f", &num2); | ||
+ | |||
+ | printf("Entre com a operacao\n"); | ||
+ | scanf("%d", &operacao); | ||
+ | |||
+ | /* Esta solução pode ser otimizada - veremos | ||
+ | mais tarde */ | ||
+ | if (operacao>=1 && operacao <=4) { | ||
+ | if (operacao==1) | ||
+ | resultado = num1 + num2; | ||
+ | if (operacao==3) | ||
+ | resultado = num1 - num2; | ||
+ | if (operacao==3) | ||
+ | resultado = num1 * num2; | ||
+ | if (operacao==4) { | ||
+ | if (num2!=0) | ||
+ | resultado = num1 / num2; | ||
+ | else | ||
+ | printf("Divisao por zero\n"); | ||
+ | } | ||
+ | printf("O resultado da operacao %d é %f\n",operacao,resultado); | ||
+ | } else { | ||
+ | printf("Operacao inválida"); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | --> | ||
+ | #Implementar um programa em C para receber a resistência em ohms de 2 resistores e então calcular a resistência série e paralela dos mesmos. | ||
+ | #Um estudo sobre sensibilidade de pessoas a temperaturas da água identificou que a maioria das pessoas considera fria a água com temperaturas abaixo de 25 graus, morna entre 25 e 30 graus, e quente acima de 30 graus. Escreva um algoritmo na forma de fluxograma que mostre as palavras "fria", "morna" ou "quente" dependendo da temperatura da água que for informada. Implemente o algoritmo na forma de um programa C. | ||
+ | #Implementar um programa que recebe três números reais e então o programa testa se estes números podem formar um triângulo EQUILÁTERO, ISÓSCELES, ESCALENO ou NÃO pode ser triângulo. (ver aula anterior). | ||
+ | #Implementar um programa calculadora em que são fornecidos dois números reais e a operação na forma de um operador +,-,x e /. O programa deve mostrar o resultado da operação. | ||
+ | <!-- | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | main() | ||
+ | { | ||
+ | float num1,num2,resultado; | ||
+ | char oper; | ||
+ | |||
+ | printf("\nEntre com num1 -> "); | ||
+ | scanf ("%f",&num1); | ||
+ | printf("\nEntre com num2 -> "); | ||
+ | scanf ("%f",&num2); | ||
+ | printf("\nEntre com operador "); | ||
+ | scanf (" %c",&oper); | ||
+ | |||
+ | if (oper=='+') | ||
+ | resultado = num1 + num2; | ||
+ | if (oper=='-') | ||
+ | resultado = num1 - num2; | ||
+ | if (oper=='x') | ||
+ | resultado = num1 * num2; | ||
+ | if (oper=='/') | ||
+ | resultado = num1 / num2; | ||
+ | |||
+ | printf("\nResultado = %f", resultado); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | --> | ||
+ | |||
+ | ===Exercícios adicionais=== | ||
+ | |||
+ | Exercício 1 | ||
+ | |||
+ | Considere dois vetores '''A''' e '''B''' dados pelas coordenadas em (x,y) em um espaço ''n'' dimensional [http://pt.wikipedia.org/wiki/Produto_escalar]: | ||
+ | |||
+ | : <math>\bold{A} = \left( a_1, a_2, \cdots, a_n \right)</math> | ||
+ | : <math>\bold{B} = \left( b_1, b_2, \cdots, b_n \right)</math> | ||
+ | |||
+ | O produto escalar entre '''A''' e '''B''' é escrito como sendo: | ||
+ | |||
+ | : <math>\bold{A}\cdot\bold{B} = \sum_{i=1}^n a_ib_i = a_1b_1 + a_2b_2 + \cdots + a_nb_n </math> | ||
+ | |||
+ | Implemente um programa C para calcular o produto escalar entre dois vetores representados no plano (2 dimensões). | ||
+ | |||
+ | Exercício 2 | ||
+ | |||
+ | Considere um móvel cuja velocidade no tempo é dada pela equação abaixo. | ||
+ | |||
+ | : <math> v(t) = v_0 + 5t^3 </math> | ||
+ | |||
+ | Implemente um programa ''Scratch'' para calcular a a aceleração em um dado tempo <math>t_d</math> fornecido. | ||
+ | '''Sugestão:''' o programa deve calcular <math>v(t_d)</math> e <math>v(t_d+\Delta p)</math> onde <math>\Delta p</math> é um passo extremamente pequeno, por exemplo, 0.001. A aceleração no ponto <math>t_d</math> é a derivada de <math>v(t)</math> no ponto, podendo ser aproximada por <math> \frac{v(t_d+\Delta p)-v(t_d)}{\Delta p}</math>. | ||
+ | |||
+ | Exercício 3 | ||
+ | |||
+ | Implementar um programa C que pergunta por uma opção de cálculo e então realiza uma das seguintes operações: | ||
+ | *(1)conversão de um número complexo representado na forma retangular para polar; | ||
+ | *(2)conversão de um número complexo representado na forma polar para retangular; | ||
+ | *(3)soma de dois números complexos no formato retangular; | ||
+ | *(4)soma de dois números complexos no formato polar. | ||
+ | |||
+ | Note que para um dado número complexo <math>z</math> tem-se: | ||
+ | |||
+ | :<math>\textstyle r=|z|=\sqrt{x^2+y^2}.\,</math> | ||
+ | |||
+ | :<math>\varphi = \arg(z) = | ||
+ | \begin{cases} | ||
+ | \arctan(\frac{y}{x}) & \mbox{if } x > 0 \\ | ||
+ | \arctan(\frac{y}{x}) + \pi & \mbox{if } x < 0 \mbox{ and } y \ge 0\\ | ||
+ | \arctan(\frac{y}{x}) - \pi & \mbox{if } x < 0 \mbox{ and } y < 0\\ | ||
+ | \frac{\pi}{2} & \mbox{if } x = 0 \mbox{ and } y > 0\\ | ||
+ | -\frac{\pi}{2} & \mbox{if } x = 0 \mbox{ and } y < 0\\ | ||
+ | \mbox{indeterminado } & \mbox{if } x = 0 \mbox{ and } y = 0. | ||
+ | \end{cases}</math> | ||
+ | |||
+ | e | ||
+ | |||
+ | :<math> z = r(\cos \varphi + i\sin \varphi ).\,</math> | ||
+ | onde | ||
+ | :<math> x = r \cos \varphi </math> | ||
+ | :<math> y = r \sin \varphi </math> | ||
+ | |||
+ | |||
{{collapse bottom}} | {{collapse bottom}} |
Edição das 13h19min de 20 de fevereiro de 2014
PRG1 - PROGRAMAÇÃO I
DADOS DA DISCIPLINA
CARGA HORÁRIA
TOTAL: 72 HORAS (4 HORAS/SEMANA)
TEÓRICA: 36 HORAS
LABORATÓRIO: 36 HORAS
DIAS COM AULA: 36 (18 semanas)
AVALIAÇÂO
Avaliações Semanais
Toda semana nas quinta feiras (aproximadamente 16 avaliações) - conceito se possível na hora
- meses de avaliação (março a junho)
- a última avaliação do mês terá caráter de recuperação
- não será permitida a consulta na avaliação
PROJETO FINAL
- grupos com 3 alunos;
- avaliação individual.
RECUPERAÇÃO FiNAL
- Ficará para recuperação o aluno que não conseguiu obter o conceito mínimo para passar em pelo menos uma das etapas avaliadas (mês) OU não obteve o sucesso no PROJETO FINAL
- última aula do semestre
- recuperação toda matéria
PRÉ REQUISITOS: LÓGICA
EMENTA
Introdução a lógica de programação e algoritmos. Constantes, variáveis e tipos de dados. Operadores aritméticos, relacionais e lógicos. Concepção de fluxograma e pseudocódigo. Estruturas de decisão e estruturas de repetição. Introdução a linguagem de programação c. Vetores de caracteres e multidimensionais. Ponteiros e aritmética de ponteiros. Funções: chamada por valor e por referência. Chamada recursiva de funções. Tipos de dados compostos. Operação com arquivos textos e binários.
CRONOGRAMA DE AULAS
Aula | Data | Horas | Conteúdo | Recursos | |
---|---|---|---|---|---|
1 | 13/2 | 2 | Aula introdução a lógica de programa. Conceito de algoritmos. Representação de algoritmos. Fluxograma. Variáveis e constantes. Expressões com operadores aritméticos e de atribuição. | ||
2 | 14/2 | 2 | Estruturas de decisão. Expressões com operadores lógicos e relacionais. | ||
3 | 20/2 | 2 | Introdução a programação C. Declaração de variáveis inteiras, reais e char no C. Uso do compilador gcc. Estruturas de decisçao com if e i eles. Expressões com operadores aritméticos, lógicos e relacionais. Operador de atribuição. | ||
4 | 21/2 | 2 | Lógica de programação: estruturas de repetição usando fluxogramas | ||
5 | 27/2 | 2 | Estruturas de repetição com a linguagem C: while, do while, for, goto. Uso do break e do continue. Uso do gdb em linha de comando. | ||
6 | 28/2 | 2 | Exercícios de Fixação | ||
7 | 6/3 | 2 | Estruturas de decisão. Comando switch. Outros comandos. Precedência de operadores no C. | ||
8 | 7/3 | 2 | Exercícios de Fixação. | ||
9 | 13/3 | 2 | Lógica de programação: quebrando problemas em subproblemas. Uso de subrotinas. Funções no C. Passagem de parâmetro e retorno de valor. AVALIAÇÂO 1 | ||
10 | 14/3 | 2 | Conceito de vetores. Vetores no C | ||
11 | 20/3 | 2 | Exercícios de vetores. AVALIAÇÂO 2 | ||
12 | 21/3 | 2 | Strings no C. Processamento de Strings. Exercícios | ||
13 | 27/3 | 2 | Strings no C. Processamento de Strings. AVALIAÇÂO 3 | ||
14 | 28/3 | 2 | Strings no C. Processamento de Strings. Exercícios | ||
15 | 3/4 | 2 | Exercícios de Fixação; AVALIAÇÂO 4 | ||
16 | 4/4 | 2 | RECUPERAÇÃO I | ||
17 | 10/4 | 2 | Operação com Matrizes no C | ||
18 | 11/4 | 2 | Exercícios com matrizes. AVALIAÇÃO 5 | ||
19 | 17/4 | 2 | Estruturas | ||
20 | 24/4 | 2 | Exercícios. AVALIAÇÂO 6 | ||
21 | 25/4 | 2 | Estruturas e vetores (Tabelas com estruturas). Typedef | ||
22 | 8/5 | 2 | Exercícios. AVALIAÇÃO 7 | ||
23 | 9/5 | 2 | RECUPERAÇÃO II | ||
24 | 15/5 | 2 | Tópicos adicionais: diretivas de préprocessamento. Compilação condicional; | ||
25 | 16/5 | 2 | Ponteiros – parte 1 | ||
26 | 22/5 | 2 | Exercícios. AVALIAÇÃO 8 | ||
27 | 23/5 | 2 | Ponteiros – parte 2 | ||
28 | 29/5 | 2 | Exercícios. AVALIAÇÃO 9 | ||
29 | 30/5 | 2 | Uso do make. Apresentação do Projeto Final. | ||
30 | 5/6 | 2 | Operação com arquivos – parte 1 | ||
31 | 6/6 | 2 | Exercícios. AVALIAÇÃO 10 | ||
32 | 12/6 | 2 | Operação com arquivos – parte 2 | ||
33 | 13/6 | 2 | Exercícios. AVALIAÇÂO 11 | ||
34 | 26/6 | 2 | RECUPERAÇÃO III | ||
35 | 27/6 | 2 | Projeto Final – Avaliação | ||
36 | 3/7 | 2 | Aula de Recuperação | ||
37 | 4/7 | 2 | Aula de Recuperação | ||
38 | 10/7 | 2 | Aula de Recuperação | ||
39 | 11/7 | 2 | RECUPERAÇÂO FINAL | ||
40 | / | ||||
TOTAL | 78 |
Bibliografia Básica
- SCHILDT, Herbert. C Completo e Total - 3.ed. [S.l.]: Makron, 1997. 830p. ISBN 978-8534605953
Referências Complementares
- Apostila adotada: Curso de Linguagem C - Engenharia Elétrica - UFMG
AULAS
AULA 1 DIA 13/02/2014 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
AULA 1 DIA 13/03/2014Como fazer um churrascoVamos observar atentamente este vídeo para iniciarmos o nosso curso de programação: EmbedVideo received the bad id "U0xSYIXE9vo#!" for the service "youtube". O que tem o churrasco com a nossa aula?? Trata-se de uma sequência de passos para execução de um objetivo. EXERCÍCIO: Na forma textual, descrever as etapas para fazer um bom churrasco. O que é um algoritmoUm algoritmo pode ser visto como uma sequência de instruções ou operações que resolvem um dado problema. A receita de um bom churrasco corresponde a um algoritmo. Como representar um algoritmo ?Uma forma é representar na forma textual ordenada: 1.Comprar a carne 2.Colocar carvão na churrasqueira 3.Acender o carvão 4.Cortar a carne (picanha) 5.Espetar a carne 6.Salgar a carne 7.Colocar a carne na churrasqueira 8.Aguardar a carne ficar no ponto desejado 9.Bater a carne 10.Servir a carne Outras formas são mais apropriadas para o uso no meio computacional:
A PENSAR: É possível mudar a ordem das instruções? É possível paralelizar algumas instruções?
E para quem são os algoritmos?Uma receita de bolo é apropriada para ser executada por um ser humano. Um procedimento de como trocar um pneu também. Mas muitas vezes queremos que o algoritmo seja executado por uma máquina! O computador é perfeito para isto! Neste curso vamos nos concentrar no desenvolvimento de algoritmos simples, desde a sua concepção até a sua implementação através de uma LINGUAGEM DE PROGRAMAÇÃO - a linguagem C , por exemplo. Um PROGRAMA implementa um algoritmo. É o algoritmo materializado na forma de uma sequência de instruções. Neste sentido, vamos entender minimamente o funcionamento de um computador (próxima aula) A Descrição de Algoritmos usando FluxogramasUm fluxograma é uma linguagem semi-gráfica que pode ser utilizada para descrição de algoritmos. Exemplo: O algoritmo de cálculo da média de dois números: Pontos fortes:
Ponto fraco:
Observe no exemplo anterior que nada é dito sobre as variáveis NUM1, NUM2 e MEDIA. Símbolos de um FluxogramaTeste de MesaConstantes, VariáveisAlgoritmos operam sobre dados. O que podem ser estes dados? Variáveis e Constantes No exemplo anterior podemos identificar três variáveis NUM1, NUM2 e MEDIA Também podemos identificar uma CONSTANTE. O número 2.
Ex: NUM1 = 5.5 /* NUM1 é uma variável real */
Ex: RES = TRUE /* RES é uma variável booleana */
Ex: LETRA = 'A'
Ex: FRASE = "ALO MUNDO" E como estas variáveis armazenam os dados?? Depende da linguagem usada. Vamos passar uma primeira noção do C ExpressõesExpressões sentenças que relacionam variáveis e constantes através de operadores matemáticos e que RESULTAM em um valor. A instrução do algoritmo: MEDIA = (NUM1 + NUM2) / 2 será considerada como uma expressão, que usa os operadores '+', '/' e '=' O operador '=' é um OPERADOR DE ATRIBUIÇÃO e indica que a expressão do lado direito do '=' será atribuída a variável do lado esquerdo. Neste curso, para mantermos coerência com a Linguagem C, consideraremos que a expressão como um todo resulta no valor que é atribuído a variável. Operadores AritméticosOs operadores aritméticos que usaremos neste curso serão os disponíveis no C:
O único operador desconhecido aqui é o resto, cujo significado é o resto entre dois númerosinteiros. Exemplo, se B possui o valor 9, então o resultado da atribuição na expressão: A = B%2 será 1. Representando o algoritmo com pseudo-código
|
AULA 2 DIA 14/02/2014 | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AULA 2 DIA 14/02/2014ObjetivosO aluno deverá saber utilizar comandos e expressões em pseudo-código e fluxogramas usando:
Expressões com operadores relacionaisNa aula anterior estudamos como construir expressões usando operadores aritméticos e o operador de atribuição. Vamos continuar este tópico aumentando o poder das expressões através dos operadores relacionais e lógicos. Os operadores relacionais permitem realizar comparações entre dois operandos. Os operadores são os seguintes:
Note que com operadores lógicos podemos construir expressões tais como indicado no exemplo abaixo: Exemplo: O algoritmo abaixo lê dois número inteiros para dentro das variáveis A e B e atribue à variável X o resultado da comparação do primeiro com o segundo. Observe que a variável X é do tipo booleano.
|
AULA 3 DIA 22/02/2014 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AULA 3 DIA 22/02/2014ObjetivosO aluno devera ser capaz de:
Possíveis linguagens de programaçãoNa prática, é inviável desenvolver programas complexos em LINGUAGEM DE MÁQUINA. Em geral, utilizamos linguagens de ALTO NÍVEL que podem, de alguma forma, serem traduzidas (compiladas) para a linguagem de baixo nível ou interpretadas em tempo de execução. Exemplo:
Neste curso utilizaremos a linguagem C. Por que? É uma linguagem muito usada na implementação de produtos eletrônicos, incluindo àqueles voltados as Telecomunicações. Introdução a linguagem C
EmbedVideo received the bad id "rGCbvqz6Kt4#!" for the service "youtube".
Visão geral do processo de compilação com gcc
Compilando um programa CNeste curso usaremos o compilador da coleção gcc do projeto GNU. O manual completo do gcc pode ser encontrado aqui. O processo de desenvolvimento do programa envolve:
mkdir ExerciciosC cd Exercicios Exemplo: salve o programa abaixo como teste.c
#include <stdio.h>
main()
{
printf("Alo Mundo\n");
}
gcc teste.c -o teste
./teste Nota: o atributo -o permite que se forneça um nome para o executável diferente de a.out É possível somente compilar (gerar código objeto): gcc -c teste.c Observe os subprodutos listando com detalhes: ls -l Estrutura do Programa em CUm programa em C pode ser visto como um conjunto de uma ou mais funções:
#include <stdio.h>
main()
{
printf("Alo Mundo\n");
}
No programa acima temos uma única função: a função main() Uma função é um pedaço de código delimitado por chaves e com um nome. Todo programa C bem comportado deve ter um função main. A primeira instrução desta função é o ponto de entrada do código do usuário. A primeira instrução do programa acima é uma chamada a uma função da biblioteca: o printf(). Esta função permite mostrar dados no terminal. Não é possível colocar instruções fora de funções! Declarando variáveis inteiras e reais locaisNo "c" temos que declarar as variáveis que serão utilizadas no programa. Se estas variáveis forem declaradas DENTRO da função elas serão "vistas" somente localmente (escopo local). Este conceito será estendido para blocos de códigos posteriormente.
#include <stdio.h>
main()
{
/* aqui começam as declarações de variáveis */
int x; /* declaração de uma variável inteira */
float y; /* declaração de uma variável real */
/* aqui começam as instruções do programa principal */
x=5; /* atribuindo o valor 5 (constante) a variável x */
y=6.5;
}
No exemplo anterior criamos duas variáveis : x e y. Lembrando que variáveis podem ser vistas como um lugar que pode armazenar um valor. Para simplificar ainda mais, podemos imaginar a variável como uma CAIXA onde podemos armazenar um valor. A CAIXA possui um nome e um tipo. O nome IDENTIFICA a CAIXA enquanto o tipo da variável determina a natureza dos valores que podemos armazenar na CAIXA: +-----+ | 5 | x +-----+ A variável x é do tipo int e, portanto, está apta a armazenar valores inteiros. Já a variável y é do tipo float e está apta a receber valores reais. +-----+ | 6.5 | y +-----+ Observe que as instruções de atribuição acima envolvem constantes também. Funções de entrada e saída de dadosNo "c" não existe instrução especialmente para leitura ou saída de dados. Este procedimento é realizado através de funções da biblioteca. Na sequência são mostradas duas funções "clássicas" de entrada e saída de dados: o printf() - já apresentado - e o scanf(). Esta última função permite entrada de dados.
#include <stdio.h>
main()
{
int x; /* declaração de uma variável inteira */
float y; /* declaração de uma variável real */
printf ("Entre com o valor de x ");
scanf("%d",&x);
printf ("Entre com o valor de y ");
scanf("%f",&y);
printf ("O valor de x é %d\n",x);
printf ("O valor de y é %f\n",y);
}
Construindo expressões no COperador de AtribuiçãoO operador de atribuição = é amplamente usado para atribuir valores para variáveis. Veja o exemplo abaixo. Dois números do tipo float são lidos para as variáveis x e y e a média é calculada e colocada na variável média. #include <stdio.h>
main()
{
float x,y;
float media;
printf("Entre com x\n");
scanf("%f", &x);
printf("Entre com y\n");
scanf("%f", &y);
media = (x+y)/2;
printf("Valor de media = %f\n",media);
}
Um diferencial do C com relação a outras linguagens é que a atribuição pode ser realizada várias vezes dentro de uma mesma instrução. Veja o exemplo: #include <stdio.h>
main()
{
int x,y,w;
x=1;
w=y=x+1;
printf("x=%d y=%d w=%d\n", x,y,w);
w=2*(y=x+1);
printf("x=%d y=%d w=%d\n", x,y,w);
}
NOTE que o código: w=2*y=x+1; produz um erro de compilação: erro: lvalue required as left operand of assignment Ver conceito de lvalue e rvalue aqui. O problema é que A ESQUERDA do sinal de atribuição sempre deve existir uma referência a uma área de memória (normalmente uma variável). A semântica da atribuição é copiar o valor computado a direita PARA a área referenciada a esquerda. Operadores aritméticosJá temos vistos expressões aritméticas com operadores básicos (+,-,*,/). Além destes operadores temos os seguintes:
Exemplo 1 #include <stdio.h>
main()
{
int x,y;
printf("Entre com x\n");
scanf("%d", &x);
y=x%2;
printf("resto x divido por 2 =%d\n",y);
}
Exemplo 2
#include <stdio.h>
main()
{
int x,y;
printf("Entre com x\n");
scanf("%d", &x);
y=x++;
printf("Valor de y =%d e o valor de x = %d\n",y, x);
x=1;
y=++x;
printf("Valor de y =%d\n",y);
}
Exemplo 3 #include <stdio.h>
main()
{
int x,y;
printf("Entre com x\n");
scanf("%d", &x);
y=x--;
printf("Valor de y =%d\n",y);
}
Note que existe uma diferença entre y = x--; e y = --x; Exemplo 4 #include <stdio.h>
main()
{
int x,y;
x=1;
y = x+++x++;
printf("x=%d y=%d\n", x,y);
x=1;
y = ++x+x++;
printf("x=%d y=%d\n", x,y);
}
Operadores Relacionais e LógicosOs operadores relacionais e lógicos são os mesmos vistos na aula anterior.
Ver Operadores Relacionais e Lógicos Comandos de decisão if() e if() else
#include <stdio.h>
main()
{
int x; /* declaração de uma variável inteira */
int y; /* declaração de uma variável inteira */
printf ("Entre com o valor de x ");
scanf("%d",&x);
printf ("Entre com o valor de y ");
scanf("%d",&y);
if (y>x)
printf("MSG1:y é maior que x\n");
if (y>x)
printf("MSG2:y é maior que x\n");
else
printf("MSG3:y é igual ou menor que x\n");
}
Outro exemplo, usando blocos:
#include <stdio.h>
main()
{
int x,y,z; /* declaração de uma variável inteira */
printf ("Entre com o valor de x ");
scanf("%d",&x);
printf ("Entre com o valor de y ");
scanf("%d",&y);
if (y>x) {
printf("MSG1: y é maior que x\n");
z = y-x;
printf("MSG2: Neste caso z = %d\n", z);
} else {
printf("MSG3: y é igual ou menor que x\n");
z = x-y;
printf("MSG4: Neste caso z = %d\n", z);
}
}
No C, qualquer expressão que resulta em 0 é considerada FALSA e qualquer expressão com valor diferente de 0 é VERDADEIRA. Exemplo: if (2)
printf("expressão sempre VERDADEIRA");
if ('2')
printf("expressão sempre VERDADEIRA");
if (1-1)
printf("expressão sempre FALSA");
if (x=1) /* um erro comum - sinal de atribuição no lugar de == */
printf("expressão sempre VERDADEIRA");
Tipo CharUma variável do tipo caracter é tratada como um número inteiro e declarada com o tipo char, que na prática é um número inteiro de byte. Exemplo #include <stdio.h>
main ()
{
char x='A',y=65,w=0x41,z;
scanf("%c",&z);
printf("Caracter lido = %c\n",z);
printf("Caracter lido = %d\n",z);
printf("Caracter lido = %x\n",z);
if (z==x)
printf("Iguais 1\n");
if (z==y)
printf("Iguais 2\n");
if (z==w)
printf("Iguais 3\n");
}
IndentaçãoExercícios
Exercícios adicionaisExercício 1 Considere dois vetores A e B dados pelas coordenadas em (x,y) em um espaço n dimensional [1]: O produto escalar entre A e B é escrito como sendo: Implemente um programa C para calcular o produto escalar entre dois vetores representados no plano (2 dimensões). Exercício 2 Considere um móvel cuja velocidade no tempo é dada pela equação abaixo. Implemente um programa Scratch para calcular a a aceleração em um dado tempo fornecido. Sugestão: o programa deve calcular e onde é um passo extremamente pequeno, por exemplo, 0.001. A aceleração no ponto é a derivada de no ponto, podendo ser aproximada por . Exercício 3 Implementar um programa C que pergunta por uma opção de cálculo e então realiza uma das seguintes operações:
Note que para um dado número complexo tem-se: e onde
|