A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Funciona, porém está ilegível!

Apresentações semelhantes


Apresentação em tema: "Funciona, porém está ilegível!"— Transcrição da apresentação:

1

2 Funciona, porém está ilegível!
Brian Kernighan (1976) “Nossa experiência mostra que a legibilidade é o único e o melhor critério para a qualidade de um programa: se um programa é fácil de ler, ele é provavelmente um bom programa; se ele é difícil de ler, provavelmente ele não é bom. " Não é bom! Funciona, porém está ilegível!

3 Funciona e está legível!
Brian Kernighan (1976) Se um programa é fácil de ler, ele é provavelmente um bom programa. Funciona e está legível!

4 Funciona, porém está ilegível! Funciona e está legível!
Brian Kernighan (1976) Funciona, porém está ilegível! int main(int argc, char *argv[]){float a,b,c;cout<< Entre com três valores reais...”<<endl;cin>>a>>b>>c; float m=(a+b+c)/2;cout<<“Média: ”<<m<<endl;return 0;} int main(int argc, char *argv[]) { float a, b, c; cout << Entre com três valores reais...” << endl; cin >> a >> b >> c; float m = (a + b + c) / 2; cout << “Média: ” << m << endl; return 0; } Funciona e está legível!

5 Descrição de Algoritmos
Narrativa: é o algoritmo descrito com o uso da linguagem natural. A linguagem natural é abstrata, imprecisa e freqüentemente pouco confiável. Isto pode ser observado por pessoas que tentam redigir um contrato ou um documento legal; Fluxograma: é o algoritmo descrito com o uso de símbolos geométricos (retângulos, losangos, etc.) enfatizando seus passos individuais e suas interconexões; Linguagem Algorítmica: é o algoritmo descrito com o uso da combinação entre a Narrativa e o Fluxograma, extraindo suas melhores características. É similar a várias linguagens de programação como, por exemplo, Object Pascal, C++, etc.

6 ISO 5807: Dados e Processos Terminação Entrada de Dados Saída de Dados
Processo de Decisão Conector passivo: sofre ação ativo: executa ação Fluxo Anotação

7 Böhn e Jacopini (1966) as estruturas têm um papel fundamental quando desejamos descrever um algoritmo que seja computável, isto é, implementável em um computador; Böhm e Jacopini demonstraram em 1966 que qualquer programa de computador pode ser decomposto através de três tipos de estruturas de programação: 1) estrutura seqüencial; 2) estrutura condicional; 3) estrutura repetitiva; estas estruturas também podem estar embutidas umas nas outras, por exemplo, uma estrutura repetitiva pode repetir uma seqüência onde um dos comandos desta seqüência seja uma estrutura condicional que por sua vez condiciona uma outra seqüência, etc.

8 Sete Peças Básicas no C++:
... 1 seqüencial ; 2 true false condicional if 4 ... v1 v2 vn default condicional switch 5 false true repetitiva for 7 true false repetitiva do/while 3 true false condicional if/else 6 false true repetitiva while

9 Sete Peças Básicas no C++
... 1 seqüencial ; retângulo a b em C++ int main(int argc, char *argv[]) { double a, b, Ar; cout << “a e b?...” << endl; cin >> a >> b; Ar = a * b; cout << “Área: ” << Ar << endl; return 0; }

10 Sete Peças Básicas no C++
2 true false condicional if comando simples: seqüência de um único comando. palavras reservadas em vermelho true if( <condição> ) <comando> ; false parênteses obrigatórios

11 Sete Peças Básicas no C++
2 true false condicional if false comando composto: seqüência de dois ou mais comandos. if( <condição> ){ <comando 1>; <comando 2>; ... <comando n>; } indentação com 2 espaços (legibilidade) true ; Aqui não tem ponto e vírgula!

12 Sete Peças Básicas no C++
3 true false condicional if/else comando simples true Uma possível forma de indentar (Kernighan & Ritchie). if( <condição> ) <comandoT> ; else <comandoF> ; false comando simples

13 Sete Peças Básicas no C++
3 true false condicional if/else false Uma possível forma de indentar (Kernighan & Ritchie). if( <condição> ){ <comandoT 1>; <comandoT 2>; ... <comandoT n>; } else{ <comandoF 1>; <comandoF 2>; <comandoF m>; true comando composto ; Aqui não tem ponto e vírgula! comando composto Aqui não tem ponto e vírgula! ;

14 Exercício 01: elabore um fluxograma para determinar o maior valor entre três valores reais.
estrutura seqüencial

15 Exercício 01: continuação.
estrutura condicional estrutura condicional embutida estrutura condicional embutida

16 Exercício 01: continuação.
estrutura seqüencial

17 Exercício 02: teste o exercício 01 para os valores abaixo
Exercício 02: teste o exercício 01 para os valores abaixo. Determine o maior e também o caminho seguido no fluxo. Veja como exemplo o teste 1. Teste a b c maior caminho 1 69 21 7 true, true 2 3 4 5 69 false, true 69 true, false 69 false, false 7 false, false

18 Exercício 03: elabore um fluxograma para determinar o menor valor entre quatro valores reais.

19 A criação de variáveis foi omitida no fluxograma!
Exercício 04: converta o exercício anterior (03) em um programa C++. A criação de variáveis foi omitida no fluxograma! int main(int argc, char *argv[]) { double a, b, c, d, menor; cin >> a >> b >> c >> d; // Admitir que um deles // é o menor. menor = a; comentário de linha // /* Comparar individualmente com os outros. */ if(b < menor) menor = b; comentário de bloco /* */

20 Exercício 04: continuação.
int main(int argc, char *argv[]) { double a, b, c, d, menor; cin >> a >> b >> c >> d; // Admitir que um deles // é o menor menor = a; /* Comparar individualmente com os outros. */ if(b < menor) menor = b; if(c < menor) menor = c; if(d < menor) menor = d; cout << “Menor: “ << menor << endl; return 0; }

21 Exercício 05: converta o programa C++ abaixo em um fluxograma e determine o que será exibido.
Aninhamento ou Embutimento. int main(int argc, char *argv[]) { double Nota1; cout << “Nota 1: ”; cin >> Nota1; double Nota2; cout << “Nota 2: “; cin >> Nota2; double Media = (Nota1 + Nota2) / 2.0; string Situacao; if(Media < 3.0){ Situacao = “Reprovado”; cout << “Media: “ << Media << endl; cout << “Situação: “ << Situacao << endl; } seqüencial condicional seqüencial

22 Exercício 05: continuação.
Aninhamento ou embutimento. Seqüen-cial if(3.0 <= Media && Media < 6.0){ double Exame; cout << “Nota Exame: “ << endl; cin >> Exame; Media = (Media + Exame) / 2.0; if(Media < 6.0) Situacao = “Reprovado Exame”; else Situacao = “Aprovado Exame”; cout << “Media: “ << Media << endl; cout << “Situação: “ << Situacao << endl; } if(6.0 <= Media){ Situacao = “Aprovado”; return 0; Condi-cional Condi-cional Seqüen-cial Seqüen-cial Condi-cional

23 Observe os níveis da numeração!
Exercício 06: converta o programa C++ abaixo em um fluxograma e determine o que será exibido. int main(int argc, char *argv[]) { double A, B, C; cout << “Entre com os lados”; cout << “Lado A: “); cin >> A; cout << “Lado B: “); cin >> B; cout << “Lado C: “); cin >> C; 1 Seq. 2 Observe os níveis da numeração! 3 4 5 6 7 8

24 Aninhamento ou embutimento.
Exercício 06: continuação. Aninhamento ou embutimento. 9 if(A < B + C && B < A + C && C < A + B){ if(B > A){ double aux = B; B = A; A = aux; } if(C > A){ double aux = C; C = A; double QA = A * A; double QBC = B * B + C * C; if(QA > QBC) cout << “Obtusângulo” << endl; if(QA == QBC) cout “Retângulo” << endl; if(QA < QBC) cout << “Acutângulo” << endl; return 0; Seq. 9.1 Cond. 9.1.1 9.1.2 Seq. 9.1.3 Seq. 9.2 Cond. 9.2.1 9.2.2 Observe os níveis da numeração! Seq. 9.2.3 Cond. 9.3 9.4 Cond. 9.5 Cond. 9.6 9.7 Cond. 10

25 Exercício 07: utilize o “else” nos últimos condicionais do exercício 06 (abaixo).
Vamos usar o else! if(QA > QBC) cout << “Obtusângulo” << endl; if(QA == QBC) cout “Retângulo” << endl; if(QA < QBC) cout << “Acutângulo” << endl; Melhorou ou piorou? Justifique. if(QA > QBC) cout << “Obtusângulo” << endl; else if(QA == QBC) cout “Retângulo” << endl; else cout << “Acutângulo” << endl;

26 Exercício 08: elabore um programa C++ para descobrir qual é a cor do ponto de coordenadas cartesianas x e y dadas. C++ álgebra de Boole conjuntos português ! não && e || ou y x 4 -4 círculo losango triângulo quadrado

27 Exercício 08: solução. int main(int argc, char *argv[]) {
cout << “Coordenadas x e y?...”; double x, y; cin >> x >> y; double a = abs(x – 4.0); double b = abs(y + 4.0); double maximo; if(a > b) maximo = a; else maximo = b; if(maximo <= 2.0 || a + abs(y – 4.0) <= 2.0) cout << “Azul” << endl; else{ double a = x + 4.0; double b = y – 4.0; double q = a * a + b * b; double r = y – x – 8.0; if(q <= 4.0 && r > 0.0) cout << “Amarelo” << endl; else if(q <= 4.0 && r <= 0.0) cout << “Vermelho” << endl; else if(r <= 0.0 && x <= 0.0 && y >= 0.0) cout << “Verde” << endl; else cout << “Branco” << endl; } return 0;

28 Sete Peças Básicas 4 condicional switch default opcional
switch ( <exp.ord.> ){ <v1>: <comando v11>; ... <comando v1n>; break; <v2>: <comando v21>; <comando v2n>; <vn>: <comando vn1>; <comando vnn>; default: } 4 ... v1 v2 vn default condicional switch v1 v2 vn default opcional default

29 Exercício 09: elabore um fluxograma e seu correspondente programa C++ para calcular e exibir, baseado numa opção de entrada, a área de uma das figuras abaixo. retângulo a b triângulo a b c elipse a b

30 Exercício 09: solução.

31 Exercício 09: continuação.

32 Exercício 09: continuação.
int main(int argc, char *argv[]) { int opcao; double a, b, c, s, Ar; cout << “Opção?(1, 2 ou 3)...”; cin >> opcao; Dois espaços de indentação! switch(opcao){ case 1: // Retângulo cout << “a e b?...”; cin >> a >> b; Ar = a * b; cout << “Área: “ << Ar << endl; break; Mais dois espaços de indentação! Outros dois espaços de indentação!

33 Exercício 09: continuação.
case 2: // Triângulo cout << “a, b, c?...”; cin >> a >> b >> c; s = (a + b + c) / 2.0; Ar = sqrt(s * (s - a) (s – b) * (s – c)); cout << “Área: “ << Ar << endl; break;

34 Exercício 09: continuação.
case 3: // Elipse cout << “a e b?...”; cin >> a >> b; Ar = M_PI * a * b / 4.0; cout << “Área: “ << Ar << endl; break; default cout << “1, 2 ou 3!” << endl; } // switch return 0; }

35 Funções: Definição e Chamada
... <tipo> <função>(<tipo1> <p1>, <tipo2> <p2>, ..., <tipon> <pn>) { // corpo da função: estruturas de controle e // chamadas de funções. return <expressão>; } execução compatíveis retorno chamada Chamada ... <função>(<a1>, <a2>, ..., <an>); Argumentos (a) e Parâmetros (p): deve haver compatibilidade de tipos.

36 Exercício 10: elabore uma função C++, que não seja a “main”, para calcular a área de um retângulo.
Definição saída entrada entrada entrada double ArRet(double a, double b) // Retorna a área de um retângulo // de lados a e b. { double Ar = a * b; return Ar; } saída entrada return a * b; Ar é do tipo double

37 Exercício 11: elabore uma função C++, que não seja a “main”, para calcular a área de uma elipse.
Definição saída entrada entrada entrada double ArElp(double a, double b) // Retorna a área de uma elipse // de diâmetros a e b. { double Ae = M_PI * a * b; return Ae; } entrada saída return M_PI * a * b; Ae é do tipo double

38 Exercício 12: elabore uma função C++, que não seja a “main”, para calcular a área de um triângulo.
Definição triângulo a b c saída entrada entrada entrada double ArTri(double a, double b, double c) // Retorna a área de um triângulo de // lados a, b e c. { double s = (a + b + c) / 2.0; double At = sqrt(s*(s-a)*(s-b)*(s-c)); return At; } entrada entrada entrada return sqrt(s*(s-a)*(s-b)*(s-c)); At é do tipo double saída

39 Exercício 13: elabore um programa C++ para calcular e exibir, baseado numa opção de entrada, a área de uma das figuras: 1) Retângulo; 2) Triângulo; 3) Elipse. int main(int argc, char *argv[]) { int opcao; double a, b, c; switch(opcao){ case 1: // Retângulo cout << “a e b?...”; cin >> a >> b; cout << “Área: “ << ArRet(a, b) << endl; break; Chamada case 2: // Triângulo cout << “a, b, c?...”; cin >> a >> b >> c; cout << “Área: “ << ArTri(a, b, c) << endl; break; Chamada

40 Exercício 13: continuação
case 3: // Elipse cout << “a e b?...”; cin >> a >> b; cout << “Área: “ << ArElp(a, b) << endl; break; default cout << “1, 2 ou 3!” << endl; } // switch return 0; } Chamada

41 Exercício 14: elabore uma função C++, que não seja a “main”, para verificar se a cor de um ponto de coordenadas cartesianas x e y é azul, segundo o diagrama abaixo. y x 4 -4 losango quadrado

42 Exercício 14: solução. bool Azul(double x, double y)
saída entrada entrada bool Azul(double x, double y) // Retorna true se o ponto é azul // e false se não é azul. { if(abs(x – 4.0) + abs(y – 4.0) <= 2.0) return true; double a = abs(x – 4.0); double b = abs(y + 4.0); double maximo; if(a > b) maximo = a; else maximo = b; if(maximo <= 2.0) return true; return false; }

43 Exercício 15: elabore uma função C++, que não seja a “main”, para verificar se a cor de um ponto de coordenadas cartesianas x e y é amarela, segundo o diagrama abaixo. y x 4 -4 círculo triângulo

44 Exercício 15: solução. bool Amarelo(double x, double y)
saída entrada entrada bool Amarelo(double x, double y) // Retorna true se o ponto é amarelo // e false se não é amarelo. { double a = x + 4.0; double b = y – 4.0; double q = a * a + b * b; if(q <= 4.0 && y – x – 8.0 > 0.0) return true; else return false; }

45 Exercício 16: elabore uma função C++, que não seja a “main”, para verificar se a cor de um ponto de coordenadas cartesianas x e y é vermelha, segundo o diagrama abaixo. y x 4 -4 círculo triângulo

46 Exercício 16: solução. bool Vermelho(double x, double y)
saída entrada entrada bool Vermelho(double x, double y) // Retorna true se o ponto é vermelho // e false se não é vermelho. { double a = x + 4.0; double b = y – 4.0; double q = a * a + b * b; if(q <= 4.0 && y – x – 8.0 <= 0.0) return true; else return false; }

47 Exercício 17: elabore uma função C++, que não seja a “main”, para verificar se a cor de um ponto de coordenadas cartesianas x e y é verde, segundo o diagrama abaixo. y x 8 -8 triângulo

48 Exercício 17: solução. bool Verde(double x, double y)
saída entrada entrada bool Verde(double x, double y) // Retorna true se o ponto é verce // e false se não é verde. { if(y – x – 8.0 <= 0.0 && x <= 0.0 && y >= 0.0) return true; else return false; }

49 Passagem por referência
Exercício 18: elabore uma função C++, que não seja a “main”, para trocar os valores de duas variáveis. Chamada a:3 b:4 Troca ( a , b ) a:4 b:3 simulação: x a:3 a:4 y b:3 b:4 entrada saída entrada saída Troca ( a, b) Definição siga a seta aux:3 void Troca(double &x, double &y) // Troca os valores das variáveis x e y. { double aux = x; // Variável auxiliar. x = y; y = aux; } siga a seta siga a seta siga a seta Passagem por referência & siga a seta

50 Sete Peças Básicas no C++
parên-teses obriga-tórios parên-teses obriga-tórios 5 false true repetitiva for ponto e vírgula obrigatório ponto e vírgula obrigatório false for( <inic.>; <comp.>; <inc.> ){ <comando 1>; <comando 2>; ... <comando n>; } true Comando simples não necessita das chaves { e }.

51 Sete Peças Básicas no C++
6 false true repetitiva while parên-teses obriga-tórios parên-teses obriga-tórios while (<condição>){ <comando 1>; <comando 2>; ... <comando n>; } true false Comando simples não necessita das chaves { e }.

52 Sete Peças Básicas no C++
7 true false repetitiva do/while do{ <comando 1>; <comando 2>; ... <comando n>; }while(<condição>); true false parên-teses obriga-tórios parên-teses obriga-tórios

53 Exercício 19: elabore uma função C++, que não seja a “main”, para calcular a soma abaixo. Use um “for”. 1 2 3 4 ... n ... q k k+1

54 Exercício 19: solução. Passagem por valor
entrada entrada saída entrada entrada chamada saída double cosseno(double x, int n) // Retorna o cosseno de x (rad) // calculado com n+1 parcelas. { ... // Chamada da função: double x = 45; // grau x *= M_PI/180.0; // rad double y = cosseno(x, 10); double cos = 0.0; double p = 1.0; double q = - x * x; int k = 1; for(int i = 0; i < n; i++){ cos += p; p *= q / (k * (k + 1)); k += 2; } return cos; retorno

55 Exercício 19: solução com “while”.
Passagem por valor saída entrada entrada chamada double cosseno(double x, int n) // Retorna o cosseno de x (rad) // calculado com n+1 parcelas. { ... // Chamada da função: double x = 45; // grau x *= M_PI/180.0; // rad double y = cosseno(x, 10); double cos = 0.0; double p = 1.0; double q = - x * x; int k = 1, i = 0; while(i < n){ cos += p; p *= q / (k * (k + 1)); k += 2; i++; } return cos; retorno

56 Exercício 19: outra solução com “while” e sem a quantidade de parcelas n.
Um erro pequeno! Passagem por valor saída entrada chamada double cosseno(double x) // Retorna o cosseno de x (rad) // calculado com n+1 parcelas. { ... // Chamada da função: double x = 45; // grau x *= M_PI/180.0; // rad double y = cosseno(x); double cos = 0.0; double p = 1.0, erro = 1E-10; double q = - x * x; int k = 1; while(fasb(p) > erro){ cos += p; p *= q / (k * (k + 1)); k += 2; } return cos; retorno

57 Exercício 19: solução com “do/while” e sem a quantidade de parcelas n.
Um erro pequeno! Passagem por valor saída entrada chamada double cosseno(double x) // Retorna o cosseno de x (rad) // calculado com n+1 parcelas. { ... // Chamada da função: double x = 45; // grau x *= M_PI/180.0; // rad double y = cosseno(x); double cos = 0.0; double p = 1.0, erro = 1E-10; double q = - x * x; int k = 1; do{ cos += p; p *= q / (k * (k + 1)); k += 2; }while(fasb(p) > erro); return cos; } retorno


Carregar ppt "Funciona, porém está ilegível!"

Apresentações semelhantes


Anúncios Google