Upload
calvin
View
17
Download
0
Embed Size (px)
DESCRIPTION
CES-10 INTRODUÇÃO À COMPUTAÇÃO. Capítulo II Algoritmos e Programas. Capítulo II – Algoritmos e Programas. 2.1 – Elementos básicos de algoritmos e programas 2.2 – Linguagens para algoritmos 2.3 – Propriedades dos bons algoritmos 2.4 – Estrutura de um programa em C. - PowerPoint PPT Presentation
Citation preview
CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO
Capítulo II Capítulo II
Algoritmos e Algoritmos e ProgramasProgramas
Capítulo II – Algoritmos e Capítulo II – Algoritmos e ProgramasProgramas
2.1 – Elementos básicos de algoritmos 2.1 – Elementos básicos de algoritmos e programase programas
2.2 – Linguagens para algoritmos2.2 – Linguagens para algoritmos
2.3 – Propriedades dos bons 2.3 – Propriedades dos bons algoritmosalgoritmos
2.4 – Estrutura de um programa em C 2.4 – Estrutura de um programa em C
2.1 – Elementos Básicos de 2.1 – Elementos Básicos de Algoritmos e ProgramasAlgoritmos e Programas
2.1.1 – A necessidade de métodos e 2.1.1 – A necessidade de métodos e algoritmosalgoritmos
Objetivo principal de um computador:Objetivo principal de um computador:
Realizar tarefas que envolvam Realizar tarefas que envolvam intenso intenso processamento de informaçõesprocessamento de informações
■ Livrando os seres humanos de Livrando os seres humanos de esforços esforços repetitivos, tediosos e sujeitos a errosrepetitivos, tediosos e sujeitos a erros
■ Possibilitando-lhes também a obtenção de Possibilitando-lhes também a obtenção de resultados confiáveis em tempo hábilresultados confiáveis em tempo hábil
Para cada Para cada tarefatarefa a ser realizada, o computador a ser realizada, o computador deve estar devidamente deve estar devidamente programadoprogramado
Caso não haja Caso não haja softwaresoftware pronto que realize a pronto que realize a tarefa requerida, alguém, que recebe a tarefa requerida, alguém, que recebe a denominação de denominação de programadorprogramador, deve elaborar , deve elaborar um um programaprograma
Programa: Programa: sequência de sequência de instruçõesinstruções que, ao que, ao serem executadas por um computador, serem executadas por um computador, realizamrealizam uma determinada tarefa uma determinada tarefa
O O programaprograma deve estar escrito numa deve estar escrito numa linguagem de programação linguagem de programação (pode até ser (pode até ser AssemblyAssembly))
Primeiros passos para a elaboração de um Primeiros passos para a elaboração de um programa:programa:
Determinação da tarefaDeterminação da tarefa a ser automatizada, a ser automatizada, com detalhes minuciososcom detalhes minuciosos
Escolha do método Escolha do método que irá fundamentar as que irá fundamentar as ações a serem realizadas pelas instruções do ações a serem realizadas pelas instruções do programa programa
Elaboração de um algoritmoElaboração de um algoritmo, que é uma , que é uma sequência de passos para a aplicação do sequência de passos para a aplicação do método escolhidométodo escolhido
Algoritmo: sequência finita e ordenada de passos (comandos executáveis e não ambíguos), que levam à aplicação de um método para a execução de uma tarefa ou resolução de um problema
Primeiros passos para a elaboração de um Primeiros passos para a elaboração de um programa:programa:
Determinação da tarefaDeterminação da tarefa a ser automatizada, a ser automatizada, com detalhes minuciososcom detalhes minuciosos
Escolha do método Escolha do método que irá fundamentar as que irá fundamentar as ações a serem realizadas pelas instruções do ações a serem realizadas pelas instruções do programa programa
Elaboração de um algoritmoElaboração de um algoritmo, que é uma , que é uma sequência de passos para a aplicação do método sequência de passos para a aplicação do método escolhidoescolhido
Elaboração do programaElaboração do programa, que é a tradução do , que é a tradução do algoritmo para a linguagem de programação algoritmo para a linguagem de programação escolhidaescolhida
2.1.2 – Algoritmos executados por seres 2.1.2 – Algoritmos executados por seres humanoshumanos
Além de computadores, Além de computadores, outras entidadesoutras entidades podem podem executar algoritmos executar algoritmos
Muitas atividades rotineiras dos Muitas atividades rotineiras dos seres humanosseres humanos podem ser descritas por algoritmos. podem ser descritas por algoritmos. Exemplos:Exemplos:
Preparo de receita culináriaPreparo de receita culinária Troca de pneu furadoTroca de pneu furado Troca de lâmpada queimadaTroca de lâmpada queimada Atividades de uma pessoa, desde o momento Atividades de uma pessoa, desde o momento
em que ela acorda, até sua chegada ao local de em que ela acorda, até sua chegada ao local de trabalhotrabalho
Exemplo: algoritmo para troca de pneu Exemplo: algoritmo para troca de pneu furadofurado
Comando condicional se-senãoComando condicional se-senão
Escopo do ramoEscopo do ramo “se” “se” não delimitado por não delimitado por chaves chaves ‘{’‘{’ e e ‘}’‘}’
Escopo do ramoEscopo do ramo “senão” “senão” delimitado por delimitado por chaves chaves ‘{’‘{’ e e ‘}’‘}’Escopos
com mais de um comando devem ser delimitados por chaves
Uso de endentações para ressaltar escopos
Exemplo: algoritmo para troca de lâmpada Exemplo: algoritmo para troca de lâmpada queimadaqueimada
A A linguagemlinguagem para descrever o algoritmo deve para descrever o algoritmo deve ser ser claraclara e sem e sem ambiguidadesambiguidades para o para o executorexecutor
Neste algoritmo há três Neste algoritmo há três comandos repetitivoscomandos repetitivos
Exercício 2.1.2:Exercício 2.1.2:
1.1.Elaborar um algoritmo estabelecendo as Elaborar um algoritmo estabelecendo as atividades de um trabalhador, desde o instante atividades de um trabalhador, desde o instante em que ele acorda até o momento em que ele em que ele acorda até o momento em que ele começa a exercer suas funções em seu começa a exercer suas funções em seu ambiente de trabalho.ambiente de trabalho.
2.1.3 – Algoritmos para computadores2.1.3 – Algoritmos para computadores
É a abordagem desta disciplina É a abordagem desta disciplina
No início de sua existência, os computadores No início de sua existência, os computadores faziam apenas faziam apenas processamento numéricoprocessamento numérico, , resolvendo diversos resolvendo diversos problemas matemáticosproblemas matemáticos
Hoje o Hoje o processamento não numéricoprocessamento não numérico é ainda é ainda mais importante que o numérico, atuando mais importante que o numérico, atuando sobre informações bastante complexas, sobre informações bastante complexas, compostas de compostas de números, textos, imagens e números, textos, imagens e sonssons
A seguir,A seguir, métodos métodos e e algoritmosalgoritmos para a para a resolução de quatro resolução de quatro problemas matemáticos problemas matemáticos simplessimples: :
Cálculo das raízes de uma equação do segundo Cálculo das raízes de uma equação do segundo grau grau
Cálculo do fatorial de um número inteiro Cálculo do fatorial de um número inteiro
Soma dos termos de uma progressão Soma dos termos de uma progressão aritmética aritmética
Cálculo da integral definida de uma Cálculo da integral definida de uma determinada função com uma variáveldeterminada função com uma variável
Cálculo das raízes de uma equação do Cálculo das raízes de uma equação do segundo grausegundo grau
Seja a seguinte equação genérica do 2º grau:Seja a seguinte equação genérica do 2º grau:
A*xA*x22 + B*x + C = 0 + B*x + C = 0
Onde, por hipótese, Onde, por hipótese,
AA, , BB e e C C são números reais e são números reais e A ≠ 0A ≠ 0
O O métodométodo escolhido para a determinação das escolhido para a determinação das raízes é o de raízes é o de BaskaraBaskara
Fórmula de Baskara:Fórmula de Baskara:
DiscriminanteDiscriminante Delta Delta: : Delta = BDelta = B22 – 4 * A * C – 4 * A * C
A ≠ 0
Delta ≥ 0
As raízes são reais
As raízes são complexas
V F
No caso real, as raízes são dadas por:No caso real, as raízes são dadas por:
E no caso complexo:E no caso complexo:
Então pode-se escrever o seguinte algoritmo:Então pode-se escrever o seguinte algoritmo:
Se os valores lidos para A, B e C forem 1, -7 e 12:Se os valores lidos para A, B e C forem 1, -7 e 12:
Resultado escrito: x1 = 4 e X2 = 3Resultado escrito: x1 = 4 e X2 = 3
Se forem 1, 4 e 5 Se forem 1, 4 e 5
Resultado escrito: x1 = (-2)+i(1) e X2 = (-2)-Resultado escrito: x1 = (-2)+i(1) e X2 = (-2)-i(1)i(1)
Comando condicional (se-senão):Comando condicional (se-senão):
Comandos de atribuição e de saída em seus Comandos de atribuição e de saída em seus escoposescopos
Formas gerais dos Formas gerais dos comandos condicionaiscomandos condicionais::
se (condição) lista de comandosse (condição) lista de comandos se (condição) lista de comandos 1 se (condição) lista de comandos 1
senão lista de comandos 2senão lista de comandos 2
Fluxogramas explicativos:
Comandos de atribuição:Comandos de atribuição:
Forma geral: Variável ← Expressão;Forma geral: Variável ← Expressão;
Variável recebe o valor calculado de expressão
Comando de entrada ou de leitura:Comando de entrada ou de leitura:
Forma geral: Ler (Lista de Variáveis);Forma geral: Ler (Lista de Variáveis);
Comandos de saída ou de escrita:Comandos de saída ou de escrita:
Forma geral: Escrever (Lista de Elementos Forma geral: Escrever (Lista de Elementos de Escrita);de Escrita);
Elemento de escrita: Texto entre aspas ou Elemento de escrita: Texto entre aspas ou valor de expressãovalor de expressão
Declaração de variáveis:Declaração de variáveis:
Todas as variáveis do programa são do tipo Todas as variáveis do programa são do tipo realreal
O algoritmo não trabalha com variáveis do tipo O algoritmo não trabalha com variáveis do tipo complexocomplexo
As variáveis Real e Imag auxiliam a escrita As variáveis Real e Imag auxiliam a escrita de raízes de raízes complexascomplexas
Cálculo do fatorial de um número inteiroCálculo do fatorial de um número inteiro
Método:Método:
n! = 1 * 2 * 3 * ... * (n-1) * n (n! = 1 * 2 * 3 * ... * (n-1) * n (por hipótese,por hipótese, n n ≥ 0)≥ 0)
Lê-se o valor de Lê-se o valor de nn
Inicializa-se o valor do fatorial com Inicializa-se o valor do fatorial com 11
Multiplica-se cumulativamente todos os valores Multiplica-se cumulativamente todos os valores inteiros do intervalo inteiros do intervalo [2, n][2, n] pelo valor do pelo valor do fatorialfatorial
Algoritmo do fatorial:Algoritmo do fatorial:A multiplicação cumulativa tem caráter repetitivo
Isso é expresso pelo comando “enquanto”
Fluxograma do comando enquanto:
Algoritmo do fatorial:Algoritmo do fatorial:A multiplicação cumulativa tem caráter repetitivo
Isso é expresso pelo comando “enquanto”
Se o valor lido para n for 7:
Resultado escrito: Fatorial (7) = 5040
Cálculo da soma dos termos de uma PA:Cálculo da soma dos termos de uma PA:
Conhecidos o 1º termo Conhecidos o 1º termo aa11, a razão , a razão rr e o n e o noo de de termos termos nn
Método: sem usar as fórmulas Método: sem usar as fórmulas
Usando a fórmula Usando a fórmula aaii = a = ai-1i-1 + r + r, começando , começando
por por aa11 e encerrando por e encerrando por aann, cada termo da PA , cada termo da PA vai sendo incluído na somatóriavai sendo incluído na somatória
Exemplo: aExemplo: a11 = 2 = 2, , r = 3r = 3 e e n = 5n = 5
Usando Usando aaii = a = ai-1i-1 + r + r, , PA = {2, 5, 8, 11, 14}PA = {2, 5, 8, 11, 14}
Inicialmente:Inicialmente:Som
a0
Exemplo: aExemplo: a11 = 2 = 2, , r = 3r = 3 e e n = 5n = 5
Usando Usando aaii = a = ai-1i-1 + r + r, , PA = {2, 5, 8, 11, 14}PA = {2, 5, 8, 11, 14}
A seguir:A seguir:Som
a2
Exemplo: aExemplo: a11 = 2 = 2, , r = 3r = 3 e e n = 5n = 5
Usando Usando aaii = a = ai-1i-1 + r + r, , PA = {2, 5, 8, 11, 14}PA = {2, 5, 8, 11, 14}
Soma
7
Exemplo: aExemplo: a11 = 2 = 2, , r = 3r = 3 e e n = 5n = 5
Usando Usando aaii = a = ai-1i-1 + r + r, , PA = {2, 5, 8, 11, 14}PA = {2, 5, 8, 11, 14}
Soma
15
Exemplo: aExemplo: a11 = 2 = 2, , r = 3r = 3 e e n = 5n = 5
Usando Usando aaii = a = ai-1i-1 + r + r, , PA = {2, 5, 8, 11, 14}PA = {2, 5, 8, 11, 14}
Soma
26
Exemplo: aExemplo: a11 = 2 = 2, , r = 3r = 3 e e n = 5n = 5
Usando Usando aaii = a = ai-1i-1 + r + r, , PA = {2, 5, 8, 11, 14}PA = {2, 5, 8, 11, 14}
Então, pode-se escrever o algoritmo a seguirEntão, pode-se escrever o algoritmo a seguir
Soma
40 Resultado
aq: aq: termo da PA a ser acrescido na somatóriatermo da PA a ser acrescido na somatória
i: i: número do termo a ser acrescentado na número do termo a ser acrescentado na somatóriasomatória
\n:\n: new-line new-line (nl)(nl) em C; posiciona o cursor no em C; posiciona o cursor no início da linha seguinteinício da linha seguinte
Resultado para a1 = 2, n = 7 e r = 3:
Progressao aritmetica: Primeiro termo: 2Razao: 3Numero de termos: 7 Soma: 77
Cálculo da integral definida de uma Cálculo da integral definida de uma determinada função com uma variáveldeterminada função com uma variável
Determinação da tarefa, com detalhes:Determinação da tarefa, com detalhes:
Calcular o valor da Calcular o valor da integral definidaintegral definida de uma de uma função função f(x)f(x), num dado intervalo lido , num dado intervalo lido [a, b][a, b], , com uma dada precisão lida com uma dada precisão lida pp
Supor que, no referido intervalo, a função Supor que, no referido intervalo, a função nãonão assuma valores assuma valores negativosnegativos
Interpretação gráfica de integral definida:Interpretação gráfica de integral definida:
A integral definida de A integral definida de f(x)f(x) no intervalo no intervalo [a, b][a, b] é a é a área área SS
Método utilizado: Regra do TrapézioMétodo utilizado: Regra do Trapézio
Dividir o intervalo de integração em n Dividir o intervalo de integração em n subintervalos de igual tamanho, determinando as subintervalos de igual tamanho, determinando as sub-áreas Ssub-áreas S11, S, S22, S, S33, ... , S, ... , Snn
Método utilizado: Regra do TrapézioMétodo utilizado: Regra do Trapézio
Aproximar a curva em cada sub-área para um Aproximar a curva em cada sub-área para um segmento de retasegmento de reta
Cada sub-área fica aproximada para um trapézioCada sub-área fica aproximada para um trapézio
Método utilizado: Regra do TrapézioMétodo utilizado: Regra do Trapézio
Calcular o somatório das sub-áreas de todos os Calcular o somatório das sub-áreas de todos os trapézios, que é uma aproximação para o valor trapézios, que é uma aproximação para o valor procurado da integral definidaprocurado da integral definida
A soma das áreas dos trapézios é dada porA soma das áreas dos trapézios é dada por
A área de cada trapézio é dada porA área de cada trapézio é dada por
Se Se n = 10 n = 10 e sendo conhecidos os valores de e sendo conhecidos os valores de a a e e bb, a , a somatóriasomatória pode ser calculada com os pode ser calculada com os seguintes comandos:seguintes comandos:
Obtenção da precisão lida Obtenção da precisão lida pp no resultado: no resultado:
Calcular um valor aproximado para a área Calcular um valor aproximado para a área SS, usando , usando um valor inicial para um valor inicial para n n ((1010 p. ex.); seja p. ex.); seja SS1010 esse valoresse valor
Calcular outro valor aproximado para Calcular outro valor aproximado para SS, dobrando-se , dobrando-se o valor de o valor de n n ((2020 p. ex.); seja p. ex.); seja SS2020 esse valoresse valor
Se Se |S|S2020 - S - S1010|≤ p|≤ p, adotar , adotar SS2020 como valor definitivo de como valor definitivo de SS
Senão, descartar Senão, descartar SS1010, calcular , calcular SS4040 e compará-lo com e compará-lo com SS2020
Quando, para algum valor Quando, para algum valor xx, , |S|S2*x2*x - S - Sxx|≤ p|≤ p, adotar , adotar SS2*x2*x como valor definitivo de como valor definitivo de SS
Obs.:Obs.: Este procedimento só é válido se Este procedimento só é válido se f(x)f(x) for for bem bem comportadacomportada em em [a, b][a, b]
Algoritmo da Regra do Trapézio com precisão Algoritmo da Regra do Trapézio com precisão exigida:exigida:
Outro tipo de comando repetitivo: Outro tipo de comando repetitivo: repetir-repetir-enquantoenquanto
Fluxograma do comando Fluxograma do comando repetir-enquantorepetir-enquanto::
Comparação dos comandos Comparação dos comandos enquanto enquanto e e repetir-repetir-enquantoenquanto::
No comando No comando repetir-enquantorepetir-enquanto, a , a lista de lista de comandoscomandos é executada pelo menos é executada pelo menos uma vezuma vez
enquanto
repetir-enquanto
As variáveis As variáveis S1S1 e e S2S2 guardam valores de guardam valores de cálculos consecutivos da integral, sendo cálculos consecutivos da integral, sendo S1S1 o o valor antigo e valor antigo e S2S2 aquele calculado com o novo aquele calculado com o novo valor de valor de nn
O valor 5 para n nunca é usado
Antes de ser usado, ele é multiplicado por 2
A atribuição A atribuição S2 ← 0S2 ← 0 no início é no início é artificialartificial
Esse valor é logo atribuído a Esse valor é logo atribuído a S1S1 e um novo e um novo valor para valor para S2S2 é calculado, para ser comparado é calculado, para ser comparado com o de com o de S1S1
Os valores de n serão 10, 20, 40, 80, 160, etc.
Se os valores lidos para Se os valores lidos para aa, , bb e e pp forem forem respectivamente respectivamente 1.51.5, , 14.8 14.8 e e 0.0010.001, e se o , e se o valor final de valor final de S2 S2 for for 327.181327.181, será escrito:, será escrito:
A integral de f(x) no intervalo [1.5, 14.8], A integral de f(x) no intervalo [1.5, 14.8], com precisão 0.001 é 327.181com precisão 0.001 é 327.181
2.1.4 – Programas a partir de algoritmos2.1.4 – Programas a partir de algoritmos
PProgramarograma foi definido como sendo uma foi definido como sendo uma ssequência de equência de instruçõesinstruções que, ao serem que, ao serem executadas por um computador, executadas por um computador, realizamrealizam uma uma determinada tarefadeterminada tarefa
AlgoritmoAlgoritmo foi definido como sendo uma foi definido como sendo uma sequência finita e ordenadasequência finita e ordenada de de passospassos (comandos (comandos executáveis e não ambíguos), que levam à executáveis e não ambíguos), que levam à aplicação de um aplicação de um métodométodo para a execução de uma para a execução de uma tarefatarefa ou resolução de um ou resolução de um problemaproblema
ProgramaPrograma também pode ser definido como sendo também pode ser definido como sendo a a traduçãotradução de um de um algoritmoalgoritmo para uma para uma linguagem de programaçãolinguagem de programação
A seguir,A seguir, programas programas a partir dos a partir dos algoritmosalgoritmos para:para:
Cálculo das raízes de uma equação do segundo Cálculo das raízes de uma equação do segundo grau grau
Soma dos termos de uma progressão Soma dos termos de uma progressão aritmética aritmética
Cálculo da integral definida de uma Cálculo da integral definida de uma determinada função com uma variáveldeterminada função com uma variável
Cálculo das raízes de uma equação do Cálculo das raízes de uma equação do segundo grau:segundo grau:
Algoritmo
#include <stdio.h>#include <stdio.h>
#include <math.h>#include <math.h>
int main () {int main () {
float A, B, C, X1, X2, Delta, Real, Imag;float A, B, C, X1, X2, Delta, Real, Imag;
}}
Algoritmo
Para usar scanf e printfPara usar pow e sqrt
#include <stdio.h>#include <stdio.h>
#include <math.h>#include <math.h>
int main () {int main () {
float A, B, C, X1, X2, Delta, Real, Imag;float A, B, C, X1, X2, Delta, Real, Imag;
scanf (“%f%f%f”, &A, &B, &C);scanf (“%f%f%f”, &A, &B, &C);
Delta = pow (B, 2) – 4*A*C;Delta = pow (B, 2) – 4*A*C;
}}
Algoritmo
“%f%f%f”: Ler 3 números reais e guardá-los em
&A, &B, &C: endereços de A, B e C
#include <stdio.h>#include <stdio.h>
#include <math.h>#include <math.h>
int main () {int main () {
float A, B, C, X1, X2, Delta, Real, Imag;float A, B, C, X1, X2, Delta, Real, Imag;
scanf (“%f%f%f”, &A, &B, &C);scanf (“%f%f%f”, &A, &B, &C);
Delta = pow (B, 2) – 4*A*C;Delta = pow (B, 2) – 4*A*C;
if (Delta >= 0) {if (Delta >= 0) {
}}
else {else {
}}
}}
Algoritmo
#include <stdio.h>#include <stdio.h>
#include <math.h>#include <math.h>
int main () {int main () {
float A, B, C, X1, X2, Delta, Real, Imag;float A, B, C, X1, X2, Delta, Real, Imag;
scanf (“%f%f%f”, &A, &B, &C);scanf (“%f%f%f”, &A, &B, &C);
Delta = pow (B, 2) – 4*A*C;Delta = pow (B, 2) – 4*A*C;
if (Delta >= 0) {if (Delta >= 0) {
X1 = (-B+sqrt(Delta))/(2*A); X2 = (-B-X1 = (-B+sqrt(Delta))/(2*A); X2 = (-B-sqrt(Delta))/(2*A);sqrt(Delta))/(2*A);
printf (“X1 = %g e X2 = %g”, X1, X2);printf (“X1 = %g e X2 = %g”, X1, X2);
}}
else {else {
}}
}}
“X1 = %g e X2 = %g”: cadeia de controle da escrita
Escreve tudo o que aparece menos os dois %g’s
O 1º %g é para escrever o valor de X1, o 2º para X2, ambos no formato real
#include <stdio.h>#include <stdio.h>
#include <math.h>#include <math.h>
int main () {int main () {
float A, B, C, X1, X2, Delta, Real, Imag;float A, B, C, X1, X2, Delta, Real, Imag;
scanf (“%f%f%f”, &A, &B, &C);scanf (“%f%f%f”, &A, &B, &C);
Delta = pow (B, 2) – 4*A*C;Delta = pow (B, 2) – 4*A*C;
if (Delta >= 0) {if (Delta >= 0) {
X1 = (-B+sqrt(Delta))/(2*A); X2 = (-B-X1 = (-B+sqrt(Delta))/(2*A); X2 = (-B-sqrt(Delta))/(2*A);sqrt(Delta))/(2*A);
printf (“X1 = %g e X2 = %g”, X1, X2);printf (“X1 = %g e X2 = %g”, X1, X2);
}}
else {else {
Real = -B / (2*A); Imag = sqrt(-Delta) / (2*A);Real = -B / (2*A); Imag = sqrt(-Delta) / (2*A);
printf (“X1 = (%g)+i(%g) e X2 = (%g)-i(%g)”, printf (“X1 = (%g)+i(%g) e X2 = (%g)-i(%g)”, Real, Imag, Real, Imag, Real, Real, Imag);Imag);
}}
}}
#include <stdio.h>#include <stdio.h>
#include <math.h>#include <math.h>
#include <stdlib.h>#include <stdlib.h>
int main () {int main () {
float A, B, C, X1, X2, Delta, Real, Imag;float A, B, C, X1, X2, Delta, Real, Imag;
scanf (“%f%f%f”, &A, &B, &C);scanf (“%f%f%f”, &A, &B, &C);
Delta = pow (B, 2) – 4*A*C;Delta = pow (B, 2) – 4*A*C;
if (Delta >= 0) {if (Delta >= 0) {
X1 = (-B+sqrt(Delta))/(2*A); X2 = X1 = (-B+sqrt(Delta))/(2*A); X2 = (-B-sqrt(Delta))/(2*A);(-B-sqrt(Delta))/(2*A);
printf (“X1 = %g e X2 = %g”, X1, X2);printf (“X1 = %g e X2 = %g”, X1, X2);
}}
else {else {
Real = -B / (2*A); Imag = sqrt(-Delta) / (2*A);Real = -B / (2*A); Imag = sqrt(-Delta) / (2*A);
printf (“X1 = (%g)+i(%g) e X2 = (%g)-i(%g)”, Real, printf (“X1 = (%g)+i(%g) e X2 = (%g)-i(%g)”, Real, Imag, Real, Imag);Imag, Real, Imag);
}}
printf (“\n\n”); system (“pause”); return 0;printf (“\n\n”); system (“pause”); return 0;
}}
Para controlar o fechamento da tela de execução
Para usar system
#include <stdio.h>#include <stdio.h>
#include <math.h>#include <math.h>
#include <stdlib.h>#include <stdlib.h>
int main () {int main () {
float A, B, C, X1, X2, Delta, Real, Imag;float A, B, C, X1, X2, Delta, Real, Imag;
scanf (“%f%f%f”, &A, &B, &C);scanf (“%f%f%f”, &A, &B, &C);
Delta = pow (B, 2) – 4*A*C;Delta = pow (B, 2) – 4*A*C;
if (Delta >= 0) {if (Delta >= 0) {
X1 = (-B+sqrt(Delta))/(2*A); X2 = X1 = (-B+sqrt(Delta))/(2*A); X2 = (-B-sqrt(Delta))/(2*A);(-B-sqrt(Delta))/(2*A);
printf (“X1 = %g e X2 = %g”, X1, X2);printf (“X1 = %g e X2 = %g”, X1, X2);
}}
else {else {
Real = -B / (2*A); Imag = sqrt(-Delta) / (2*A);Real = -B / (2*A); Imag = sqrt(-Delta) / (2*A);
printf (“X1 = (%g)+i(%g) e X2 = (%g)-i(%g)”, Real, printf (“X1 = (%g)+i(%g) e X2 = (%g)-i(%g)”, Real, Imag, Real, Imag);Imag, Real, Imag);
}}
printf (“\n\n”); system (“pause”); return 0;printf (“\n\n”); system (“pause”); return 0;
}}
Os detalhes da formatação de saída dos resultados em princípio não precisam aparecer no algoritmo
Apenas aparecem os elementos a serem escritos
A inclusão da biblioteca da linguagem também não precisa aparecer no algoritmo
Programa final
As exigências do ambiente também não precisam aparecer no algoritmo
Soma dos termos de uma progressão Soma dos termos de uma progressão aritmética:aritmética:
Algoritmo
#include <stdio.h>#include <stdio.h>
#include <stdlib.h>#include <stdlib.h>
int main () {int main () {
int a1, r, n, soma, aq, i;int a1, r, n, soma, aq, i;
scanf (“%d%d%d”, &a1, &n, &r);scanf (“%d%d%d”, &a1, &n, &r);
soma = 0; aq = a1; i = 1;soma = 0; aq = a1; i = 1;
while (i <= n) {while (i <= n) {
soma = soma + aq;soma = soma + aq;
aq = aq + r;aq = aq + r;
i = i + 1;i = i + 1;
}}
}}
Algoritmo
#include <stdio.h>#include <stdio.h>
#include <stdlib.h>#include <stdlib.h>
int main () {int main () {
int a1, r, n, soma, aq, i;int a1, r, n, soma, aq, i;
scanf (“%d%d%d”, &a1, &n, &r);scanf (“%d%d%d”, &a1, &n, &r);
soma = 0; aq = a1; i = 1;soma = 0; aq = a1; i = 1;
while (i <= n) {while (i <= n) {
soma = soma + aq;soma = soma + aq;
aq = aq + r;aq = aq + r;
i = i + 1;i = i + 1;
}}
printf (“\nProgressao aritmetica:\n\nPrimeiro termo: printf (“\nProgressao aritmetica:\n\nPrimeiro termo: %d”, a1);%d”, a1);
printf (“\nRazao: %d\nNumero de termos: %d”, r, n);printf (“\nRazao: %d\nNumero de termos: %d”, r, n);
printf (“\n\nSoma: %d”, soma);printf (“\n\nSoma: %d”, soma);
printf (“\n\n”); system (“pause”); return 0;printf (“\n\n”); system (“pause”); return 0;
}}
Novamente, a formatação da saída não precisa aparecer no algoritmo
Inclusive os ‘\n’s poderiam ser dele omitidos
Cálculo da integral definida de função com Cálculo da integral definida de função com uma variável:uma variável:
Algoritmo
O programa será particularizado para a função
f(x) = log10x + 5
No Capítulo sobre Subprogramação, será visto um programa de integrais definidas para várias funções
#include <stdio.h>#include <stdio.h>
#include <math.h> #include <math.h>
#include <stdlib.h> #include <stdlib.h>
double f (double x) {double f (double x) {
return (log10(x) + 5);return (log10(x) + 5);
}}
int main () {int main () {
- - - - -- - - - -
}}
Algoritmo
Declaração da função f(x) = log10x + 5
double: real de dupla precisão
int main () {int main () {
int n, i; float a, b, p;int n, i; float a, b, p;
double S1, S2, STrap, Dx;double S1, S2, STrap, Dx;
scanf ("%f%f%f", &a, &b, &p);scanf ("%f%f%f", &a, &b, &p);
S2 = 0; n = 5;S2 = 0; n = 5;
do {do {
} while (fabs (S1-S2) > p);} while (fabs (S1-S2) > p);
}}
Algoritmo
fabs: valor absoluto de expressão real
int main () {int main () {
int n, i; float a, b, p;int n, i; float a, b, p;
double S1, S2, STrap, Dx;double S1, S2, STrap, Dx;
scanf ("%f%f%f", &a, &b, &p);scanf ("%f%f%f", &a, &b, &p);
S2 = 0; n = 5;S2 = 0; n = 5;
do {do {
S1 = S2; n = 2*n;S1 = S2; n = 2*n;
Dx = (b-a)/n; S2 = 0; i = 1;Dx = (b-a)/n; S2 = 0; i = 1;
while (i <= n) {while (i <= n) {
STrap = Dx * (f(a+(i-1)*Dx) + f(a+i*Dx)) / 2;STrap = Dx * (f(a+(i-1)*Dx) + f(a+i*Dx)) / 2;
S2 = S2 + STrap;S2 = S2 + STrap;
i = i + 1;i = i + 1;
}}
} while (fabs (S1-S2) > p);} while (fabs (S1-S2) > p);
}}
int main () {int main () {
int n, i; float a, b, p;int n, i; float a, b, p;
double S1, S2, STrap, Dx;double S1, S2, STrap, Dx;
scanf ("%f%f%f", &a, &b, &p);scanf ("%f%f%f", &a, &b, &p);
S2 = 0; n = 5;S2 = 0; n = 5;
do {do {
S1 = S2; n = 2*n;S1 = S2; n = 2*n;
Dx = (b-a)/n; S2 = 0; i = 1;Dx = (b-a)/n; S2 = 0; i = 1;
while (i <= n) {while (i <= n) {
STrap = Dx * (f(a+(i-1)*Dx) + f(a+i*Dx)) / 2;STrap = Dx * (f(a+(i-1)*Dx) + f(a+i*Dx)) / 2;
S2 = S2 + STrap;S2 = S2 + STrap;
i = i + 1;i = i + 1;
}}
} while (fabs (S1-S2) > p);} while (fabs (S1-S2) > p);
printf ("\nA Integral de f(x) no intervalo [%g, %g]", a, b);printf ("\nA Integral de f(x) no intervalo [%g, %g]", a, b);
printf (" com precisao %g eh %g", p, S2);printf (" com precisao %g eh %g", p, S2);
printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;
}}
O programa não está amigável
2.1.5 – Produção de um software2.1.5 – Produção de um software
Produzir um softwareProduzir um software é muito mais do que é muito mais do que sair escrevendosair escrevendo um programa em uma um programa em uma linguagem de programaçãolinguagem de programação
Quando o software é de Quando o software é de grande portegrande porte seu seu desenvolvimento é bem desenvolvimento é bem complexocomplexo e podem ser e podem ser necessárias várias necessárias várias equipesequipes
Isso é tema da disciplina Isso é tema da disciplina Engenharia de Engenharia de SoftwareSoftware::
Software é um produto de EngenhariaSoftware é um produto de Engenharia
Etapas para produção de software de grande Etapas para produção de software de grande porte:porte:
Levantamento de requisitosLevantamento de requisitos
Elaboração do projetoElaboração do projeto
ImplementaçãoImplementação
Realização de testesRealização de testes
Entrega e implantaçãoEntrega e implantação
Operação e manutençãoOperação e manutenção
Levantamento de requisitos:Levantamento de requisitos:
Os Os requisitosrequisitos definem as definem as funcionalidadesfuncionalidades de de um software e as um software e as restrições e limitaçõesrestrições e limitações do do software que está sendo desenvolvidosoftware que está sendo desenvolvido
Requisitos FuncionaisRequisitos Funcionais Caracterizam a funcionalidade do software, Caracterizam a funcionalidade do software,
ou seja, o que ele deve fazerou seja, o que ele deve fazer
Requisitos Não-FuncionaisRequisitos Não-Funcionais Caracterizam restrições e limitações sobre a Caracterizam restrições e limitações sobre a
funcionalidade Exemplo: desempenho, funcionalidade Exemplo: desempenho, segurança, etc.segurança, etc.
Problemas para levantar requisitos:Problemas para levantar requisitos:
Clientes erram e mudam de idéiaClientes erram e mudam de idéia
Deve-se estabelecer com precisão o Deve-se estabelecer com precisão o escopoescopo do do softwaresoftware
Comunicação pode falharComunicação pode falhar
Deve-se fazer uso de Deve-se fazer uso de diagramasdiagramas e e documentaçãodocumentação para melhorar o entendimento; para melhorar o entendimento; formalidadeformalidade necessária necessária
Não é uma atividade puramente técnicaNão é uma atividade puramente técnica
Requer habilidade de Requer habilidade de relacionamento relacionamento humanohumano
Elaboração do projeto:Elaboração do projeto:
Arquitetura do software:Arquitetura do software: pode ser a pode ser a integração de vários módulosintegração de vários módulos
Escolha dos Escolha dos métodosmétodos e elaboração dos e elaboração dos algoritmosalgoritmos
Implementação:Implementação:
Tradução do algoritmo para uma Tradução do algoritmo para uma linguagem linguagem de programaçãode programação
Preocupações com alocação de Preocupações com alocação de memóriamemória, tipos , tipos de de dadosdados, , desempenhodesempenho, etc., etc.
Eliminação dos Eliminação dos erros de sintaxeerros de sintaxe
Realização de testes:Realização de testes:
Verificação da implementação correta dos Verificação da implementação correta dos requisitos levantadosrequisitos levantados
Primeiramente, Primeiramente, cada módulocada módulo é testado é testado individualmenteindividualmente
Depois os módulos são Depois os módulos são integradosintegrados e sua e sua composição é testadacomposição é testada
Tipos de teste:Tipos de teste:
Testes com entradas Testes com entradas corretascorretas: a saída deve : a saída deve estar estar corretacorreta
Testes com entradas Testes com entradas errôneaserrôneas: a saída deve : a saída deve ser ser irregularirregular
Testes de Testes de desempenhodesempenho: tempo de resposta, : tempo de resposta, testes com dados de entrada volumosostestes com dados de entrada volumosos
Os testes quase sempre determinam Os testes quase sempre determinam correçõescorreções no programa no programa
Deve-se elaborar um Deve-se elaborar um relatóriorelatório final dos testes, final dos testes, com resultados obtidoscom resultados obtidos
É importante o envolvimento com o É importante o envolvimento com o usuáriousuário
Entrega e implantação:Entrega e implantação:
O software deve ser O software deve ser instaladoinstalado em ambiente de em ambiente de produçãoprodução
Usuários devem ser Usuários devem ser treinadostreinados
O O ambienteambiente de produção deve ser de produção deve ser configuradoconfigurado
Principal Principal propósitopropósito desta fase: desta fase:
Realizar Realizar testes de aceitaçãotestes de aceitação (certificar de (certificar de que o software que o software satisfazsatisfaz os requisitos dos os requisitos dos usuáriosusuários))
Operação e manutenção:Operação e manutenção:
Fase de operação:Fase de operação: o software passa a ser o software passa a ser utilizadoutilizado de fato em ambiente de produção de fato em ambiente de produção
Manutenções corretivas:Manutenções corretivas: correção de erros e correção de erros e falhasfalhas
Manutenções adaptativas: Manutenções adaptativas: (alterações no meio (alterações no meio externo)externo) Novas versões de plataformaNovas versões de plataforma Mudanças nas leis, políticas, etc.Mudanças nas leis, políticas, etc.
Manutenções evolutivas:Manutenções evolutivas: novas funcionalidades novas funcionalidades
Manutenções preventivas:Manutenções preventivas: garantir maior garantir maior confiabilidade e possibilidade de manutençãoconfiabilidade e possibilidade de manutenção
É importante seguir boaspráticas de programação para o programa ficar fácilde ser entendido e alterado