Você está na página 1de 12

Tcnico de Gesto e Programao de Sistemas Informticos

Caderno de Correces Introduo Programao e Algotmia Verso 2.1

Disciplina: Programao e Sistemas de Informao Mdulo I: Introduo Programao e Algoritmia


Lisboa, Jorge Carvalho (2011)

Este trabalho est licenciado sob uma Licena Creative Commons Atribuio-Uso No-Comercial-Compartilhamento.

ndice
Motivao ............................................................................................................................ ii I Iniciao aos programas em C ....................................................................................1 1 rea e permetro de circunferncias (Ficha 1 Exerccio 1)......................................1 2 rea e volume de esferas (Ficha 1 Exerccio 2).....................................................1 3 Troca de valores (Ficha 1 Exerccio 3)....................................................................2 4 Coverso de segundos (Ficha 1 Exerccio 4)..........................................................2 5 Converso de horas (Ficha 1 Exerccio 5) ..............................................................3 6 Distncia da trovoada (Ficha 1 Exerccio 6)............................................................3 7 Altura de precipcios (Ficha 1 Exerccio 7) ..............................................................4 II Instruo de seleco simples ...................................................................................5 8 Converso (Ficha 2 Exerccio 1) .............................................................................5 9 Calculadora bsica (Ficha 2 Exerccio 2) ................................................................5 10 Classificao qualitativa (Ficha 2 Exerccio 3) .....................................................6 11 Nota mnima (Ficha 2 Exerccio 4) ........................................................................7 12 Localizao do ponto (Ficha 2 Exerccio 5)...........................................................8 13 Frmula Resolvente (Ficha 2 Exerccio 6) ............................................................9

INETE Instituto de Educao Tcnica

ii

Motivao

Edsger Wybe Dijkstra.


Foto 2002 Hamilton Richards

Edsger Wybe Dijkstra (1930 2002) foi um dos mais influentes membros da sua gerao nas cincias informticas, tendo sido fundamental a sua contribuio cientfica em algumas reas, como seja: Desenho de algoritmos; Linguagens de programao; Sistemas operativos; Processamento distribudo.

Dijkstra sempre se envolveu na problemtica do ensino e nas relaes entre a cincia informtica e a indstria de software, sendo uma referncia para quem procura ensinar com qualidade, tcnica e profissionalmente, temas abrangidos pelas cincias informticas. O excerto seguinte foi retirado da aula de apresentao de um curso leccionado por Dijkstra, e reflecte o meu pensamento enquanto professor de Linguagens de Programao (os destaques so meus).
[] I think it wise, and only honest, to warn you that my goal is immodest. It is not my purpose to transfer knowledge to you that, subsequently, you can forget again. My purpose is no less than to effectuate in each of you a noticeable, irreversible change. [] I want you to gain, for the rest of your lives, the insight that beautiful proofs are not found by trial and error but are the result of a consciously applied design discipline. I want to inspire you to raise your quality standards. I mean, if 10 years from now, when you are doing something quick and dirty, you suddenly visualize that I am looking over your shoulders and say yourself Dijkstra would not have liked this, well, that would be enough immortality for me. Your obligation is that of active participation. You should not act as knowledge-absorving sponges, but as whetstones on witch we can all sharpen our wits. If you dont understand me, ask for clarification; if I am going too fas, slow me down. [] Austin, Texas, 30 August 1995

INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia

I Iniciao aos programas em C


1 rea e permetro de circunferncias (Ficha 1 Exerccio 1)
#include <stdio.h> #include <math.h> // para a funo pow - potncias #define PI 3.141592653 // variveis globais double raio; double area, perim; // corpo do programa int main() { // input do raio printf("Introduza o valor do raio: "); scanf("%lf", &raio); // calculos area = PI * pow(raio, 2); perim = 2 * PI * raio; //output de resultados printf("Raio da circunferencia: %6.3lf\n", raio); printf(" Area = %8.3lf\n Perimetro = %8.3lf\n", area, perim); // terminar o programa return 0; }

2 rea e volume de esferas (Ficha 1 Exerccio 2)


#include <stdio.h> #include <math.h> // para a funo pow - potncias #define PI 3.141592653 // variveis globais double raio; double area, vol; // corpo do programa int main() { // input do raio printf("Introduza o valor do raio: "); scanf("%lf", &raio); // calculos area = 4 * PI * pow(raio, 2); vol = 4 * PI * pow(raio, 3) / 3; //output de resultados printf("Raio da esfera: %6.3lf\n", raio); printf(" Area = %8.3lf\n Volume = %8.3lf\n", area, vol); INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia // terminar o programa return 0; }

3 Troca de valores (Ficha 1 Exerccio 3)


#include <stdio.h> #define PI 3.141592653 // variveis globais int num1, num2; int temp; // corpo do programa int main() { // input dos nmeros printf("Introduza o 1o. valor: "); scanf("%d", &num1); printf("Introduza o 2o. valor: "); scanf("%d", &num2); printf("\n---------------------------------\n"); printf("Valores antes da troca:\n"); printf("Num1 = %8d Num2 = %8d\n", num1, num2); // troca dos valores temp = num1; num1 = num2; num2 = temp; //output depois da troca printf("\n---------------------------------\n"); printf("Valores depois da troca:\n"); printf("Num1 = %8d Num2 = %8d\n", num1, num2); // terminar o programa return 0; }

4 Coverso de segundos (Ficha 1 Exerccio 4)


#include <stdio.h> // variveis globais long int qtdSegs; int qtdDias, qtdHrs, qtdMins; // corpo do programa int main() { // input da qtd. de segundos printf("Introduza a quantidade de segundos: "); scanf("%ld", &qtdSegs); // inicio do output (para usar o valor de qtdSegs inicial) printf("\n%10ld segundos correspondem a ", qtdSegs); //converso em mins qtdMins = qtdSegs / 60;

INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia // segs que sobram qtdSegs = qtdSegs % 60; // converso em horas qtdHrs = qtdMins / 60; // mins que sobram qtdMins = qtdMins % 60; // converso em dias qtdDias = qtdHrs / 24; // horas que sobram qtdHrs = qtdHrs % 24; //output da converso printf("%d dias, %02d horas, %02d mins e %02d segs", qtdDias, qtdHrs, qtdMins, qtdSegs); // terminar o programa return 0; }

5 Converso de horas (Ficha 1 Exerccio 5)


#include <stdio.h> // variveis globais int hrs, mins, segs; long int qtdSegs; // corpo do programa int main() { // input da hora:min:seg printf("Introduza a hora (HH:MM:SS) -> "); scanf("%d:%d:%d", &hrs, &mins, &segs); // inicio do output (para usar os valores iniciais) printf("\n%02d:%02d:%02d corresponde a ", hrs, mins, segs); //converso de horas em mins mins = hrs * 60; //converso em secs qtdSegs = segs + mins * 60; //output da converso printf("%6d segs\n", qtdSegs); // terminar o programa return 0; }

6 Distncia da trovoada (Ficha 1 Exerccio 6)


#include <stdio.h> #define SPEED_SOUND 340 // variveis globais int qtdSegs; int dist, distKm, distM; // em [m/s]

INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia // corpo do programa int main() { // input dos segs printf("Indique quantos segundos passaram desde o relampago: "); scanf("%d", &qtdSegs); // calculo da distancia em [m] dist = SPEED_SOUND * qtdSegs; // converso para Km e m distKm = dist / 1000; distM = dist % 1000; //output da distancia printf("A trovoada esta a %d Km e %03d m\n", distKm, distM); // terminar o programa return 0; }

7 Altura de precipcios (Ficha 1 Exerccio 7)


#include <stdio.h> #include <math.h> #define ACELERA 9.8 // variveis globais int qtdSegs; double dist; // corpo do programa int main() { // input dos segs printf("Indique quantos segundos demora a pedra a cair: "); scanf("%d", &qtdSegs); // calculo da distancia em [m] dist = 0.5 * ACELERA * pow(qtdSegs, 2); //output da distancia printf("Altura do precipicio: %.2lf m\n", dist); // terminar o programa return 0; } // em [m/s2]

INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia

II Instruo de seleco simples


8 Converso (Ficha 2 Exerccio 1)
#include <stdio.h> // variveis globais int numInput; int dig1, dig2; // "digitos" da converso // corpo do programa int main() { // input do raio printf("Introduza o valor a converter: "); scanf("%d", &numInput); // validao do valor if(numInput < 0 || numInput > 255) printf("Valor invalido!\n"); else { // converso automtica pelo printf: %o -> octal; %x -> hexadecimal printf("Conversao automatica:\n"); printf("%d corresponde a %o em octal e %X em hexadecimal.\n", numInput, numInput, numInput); /* clculo da converso: * 255 corresponde no mximo a FF, logo ir haver no mximo 2 dgitos */ dig1 = numInput / 16; dig2 = numInput % 16; // output dos resultados printf("Conversao calculada:\n"); printf("%d corresponde a ", numInput); // dgito 1 if(dig1 < 10) printf("%d", dig1); else printf("%c", 'A' + dig1 % 10); // dgito 2 if(dig2 < 10) printf("%d", dig2); else printf("%c", 'A' + dig2 % 10); printf(" em hexadecimal.\n"); } // terminar o programa return 0; }

9 Calculadora bsica (Ficha 2 Exerccio 2)


#include <stdio.h> // variveis globais int num1, num2, result; char oper; int inputs; // validao do scanf INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia // corpo do programa int main() { // input dos valores e da operao printf("Introduza os valores e a operacao (ex.: 2+3): "); inputs = scanf("%d%c%d", &num1, &oper, &num2); // validao do formato if(inputs < 3) printf("Formato invalido!\n"); else { // validaao da operao if(oper != '+' && oper != '-' && oper != '*' && oper != '/') printf("Operacao invalida!\n"); else { // clculos if(oper == '+') result = num1 + num2; else if(oper == '-') result = num1 - num2; else if(oper == '/') result = num1 / num2; else result = num1 * num2; // output dos resultados printf("%d %c %d = %d\n", num1, oper, num2, result); } } // terminar o programa return 0; }

10 Classificao qualitativa (Ficha 2 Exerccio 3)


#include <stdio.h> // variveis globais int nota; // corpo do programa int main() { // input da nota printf("Introduza o valor da nota: "); scanf("%d", &nota); // validao da nota if(nota >= 0 && nota <= 20) { if(nota <= 7) printf("Muito mau!\n"); else if(nota <= 9) printf("Mau.\n"); INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia else if(nota <= 12) printf("Medio.\n"); else if(nota <= 17) printf("Bom.\n"); else printf("Muito bom!\n"); } else printf("Nota invalida!\n"); // terminar o programa return 0; }

11 Nota mnima (Ficha 2 Exerccio 4)


#include <stdio.h> // variveis globais double NT1, NT2, NT3; // corpo do programa int main() { // leitura das duas primeiras notas printf("Introduza as notas dos testes.\n"); printf("Teste 1 -> "); scanf("%lf", &NT1); printf("Teste 2 -> "); scanf("%lf", &NT2); // validao das notas if(NT1 < 0 || NT1 > 20) printf("Nota 1 invalida!\n"); else { if(NT2 < 0 || NT2 > 20) printf("Nota 2 invalida!\n"); else { /* calculo da nota minima: * (Nt1+Nt2+Nt3)/3 >= 10 <=> Nt3 >= 30-(Nt1+Nt2) */ NT3 = 30 - NT1 - NT2; // output dos resultados printf("Com as notas %.2lf e %.2lf", NT1, NT2); // teste dos valores if(NT3 < 0) printf(" ja' esta' aprovado.\n"); else if(NT3 > 20) printf(" ja' esta' reprovado!\n"); else printf(" a nota minima tera' que ser %.2lf.\n", NT3); } } // terminar o programa return 0; } INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia

12 Localizao do ponto (Ficha 2 Exerccio 5)


#include <stdio.h> #include <math.h> // para as funes sqrt e pow // variveis globais int x, y; int inputs; double modVector, seno, coseno; // corpo do programa int main() { // input das coordenadas do ponto printf("Introduza as coordenadas do ponto (x,y): "); inputs = scanf("%d,%d", &x, &y); if(inputs < 2) { printf("Formato invalido!\n"); // terminar o programa return 0; } // inicio da frase de output printf("O ponto esta' "); //estudo da posio do ponto if(x < 0) { if(y == 0) printf("sobre o eixo negativo do Xs!"); else if(y > 0) printf("no segundo quadrante!"); else printf("no terceiro quadrante!"); } else { // x >= 0 if(x > 0) { if(y == 0) printf("sobre o eixo positivo do Xs!"); else if(y > 0) printf("no primeiro quadrante!"); else printf("no quarto quadrante!"); } else { if(y == 0) printf("sobre a origem!"); else if(y > 0) printf("sobre o eixo positivo do Ys!"); else printf("sobre o eixo negativo do Ys!"); } } // extras: clculo do mdulo do vector, do coseno e do seno modVector = sqrt(pow((double)x, 2) + pow((double)y, 2)); printf("\n\nExtras:\n"); printf(" Modulo do vector: %.3lf\n", modVector); // se as coordenadas forem diferentes de 0, calcular o sen e o cos if(modVector != 0) { coseno = x / modVector; seno = y / modVector; printf(" Seno : %.3lf\n", seno); printf(" Coseno: %.3lf\n", coseno); } // terminar o programa return 0; } INETE Instituto de Educao Tcnica

TGPSI PSI: Introduo Programao e Algoritmia

13 Frmula Resolvente (Ficha 2 Exerccio 6)


#include <stdio.h> #include <math.h> // nacessrio para a funo sqrt // variveis globais double coefA, coefB, coefC; double X1, X2, delta; int main() { // input dos coeficientes da equao printf("Introduza os coeficientes da equacao: \n"); printf("A -> "); scanf("%lf", &coefA); printf("B -> "); scanf("%lf", &coefB); printf("C -> "); scanf("%lf", &coefC); // verificar se uma equao do 2. grau if(coefA == 0) printf("Os coeficentes nao sao de uma equacao do 2. grau!"); else { // verificar se tem raizes delta = pow(coefB, 2) - 4 * coefA * coefC; if(delta < 0) printf("A equacao nao tem raizes reais!"); else { if(delta == 0) { // raizes duplas X1 = -coefB / (2 * coefA); printf("Raiz dupla: %6.2lf", X1); } else { X1 = (-coefB + sqrt(delta)) / (2 * coefA); X2 = (-coefB - sqrt(delta)) / (2 * coefA); printf("Raizes da equacao:\n X1: %6.2lf\n X2: %6.2lf", X1, X2); } } } //terminar o programa return 0; }

INETE Instituto de Educao Tcnica

Você também pode gostar