ces-10 introduÇÃo À computaÇÃo capítulo ii algoritmos e programas

Post on 16-Apr-2015

106 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 acrescido na somatórianúmero do termo a ser acrescido na somató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 <conio.h>#include <conio.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\nDigite algo para encerrar”); getch ();printf (“\n\nDigite algo para encerrar”); getch ();

}}

Para que o ambiente mantenha a tela de execução

Para usar getch

#include <stdio.h>#include <stdio.h>

#include <math.h>#include <math.h>

#include <conio.h>#include <conio.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\nDigite algo para encerrar”); getch ();printf (“\n\nDigite algo para encerrar”); getch ();

}}

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 <conio.h>#include <conio.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 <conio.h>#include <conio.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\nDigite algo para encerrar”); getch ();printf (“\n\nDigite algo para encerrar”); getch ();

}}

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 <conio.h> #include <conio.h>

double f (double x) {double f (double x) {

return (log10(x) + 5);return (log10(x) + 5);

}}

void main () {void main () {

- - - - -- - - - -

}}

Algoritmo

Declaração da função f(x) = log10x + 5

double: real de dupla precisão

void main () {void 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

void main () {void 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);

}}

void main () {void 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\nDigite algo para encerrar"); getch ();printf ("\n\nDigite algo para encerrar"); getch ();

}}

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

top related