Você está na página 1de 14

Programar em C

Revisão da metodologia de programação


baseada em funções.
O nosso primeiro programa em C

Pretende-se um programa que, dado o número do aluno, as duas


notas dos trabalhos e as duas notas dos testes do aluno, calcule e
apresente a seguinte informação:
– a nota final do aluno;
– indicação se o aluno foi aprovado (nota final >= 10 valores).

O número do aluno é um valor inteiro, as notas dos trabalhos e testes


são valores reais e a nota final é um valor inteiro.

O cálculo da nota final é:


NF = 0,15*T1 + 0,45*T2 + 0,25*TP1 + 0,15*TP2 em que,
NF – Nota Final
TP – Nota dos Trabalhos Práticos
T – Nota de teste
Problema “Nota Final”
Dados do problema – Variáveis

/* Programa da nota final */ Variáveis Input:


... numAluno (int)
t1, t2, tp1, tp2 (float)
Variáveis Output:
notaFinal, aprovado (int)
int main(){
int numAluno, notaFinal, aprovado;
float t1, t2, tp1, tp2;

return 0;
}
Problema “Nota Final”
Desenho do algoritmo

/* Programa da nota final */


... Identificação dos passos fundamentais do
int main(){ problema
int numAluno, notaFinal, aprovado;
float t1, t2, tp1, tp2;

/* Leitura dos dados de entrada */


...
/* Calculo de resultados */
...
/* Escrita dos resultados */
...
return 0;
}
Problema “Nota Final”
Desenho do algoritmo – Identificação de funções (1)

/* Programa da nota final */


Chamada à leitura dos dados: Os argumentos
#include <stdio.h> são os endereços das variáveis, onde serão
... guardados os valores lidos
int main(){
int numAluno, notaFinal, aprovado;
float t1, t2, tp1, tp2;

/* Leitura dos dados de entrada */


lerNotasAluno(&numAluno,&t1,&t2,&tp1,&tp2);
/* Calculo de resultados */
...
/* Escrita dos resultados */ Função a implementar:
... “lerNotasAluno”
return 0;
}
Problema “Nota Final”
Desenho do algoritmo – Identificação de funções (2)

/* Programa da nota final */


...
int main(){
int numAluno, notaFinal, aprovado;
float t1, t2, tp1, tp2;

/* Leitura dos dados de entrada */


lerNotasAluno(&numAluno,&t1,&t2,&tp1,&tp2);
/* Calculo de resultados */
notaFinal = calculaNota(t1,t2,tp1,tp2);
aprovado = eAprovado(notaFinal);
/* Escrita dos resultados */
... Funções a implementar:
return 0; “calculaNota”
} “eAprovado”
Problema “Nota Final”
Desenho do algoritmo - Escrita de resultados

/* Programa da nota final */


...
int main(){
int numAluno, notaFinal, aprovado;
float t1, t2, tp1, tp2;

/* Leitura dos dados de entrada */


lerNotasAluno(&numAluno,&t1,&t2,&tp1,&tp2);
/* Calculo de resultados */
notaFinal = calculaNota(t1,t2,tp1,tp2);
aprovado = eAprovado(notaFinal);
/* Escrita dos resultados */
if (aprovado)
printf("O aluno %d foi aprovado com nota de %d valores\n",numAluno,notaFinal);
else
printf("O aluno %d foi reprovado com nota de %d valores\n",numAluno,notaFinal);
return 0;
}
Problema “Nota Final”
Implementação de funções – “lerNotasAluno” (1)

/* Programa da nota final */


...
#include <stdio.h>

/* Leitura das notas do aluno */


void lerNotasAluno(int * n, float * t1, float * t2, float * t3, float * t4);

int main() {
Protótipo da função: indica o tipo do
int numAluno, notaFinal, aprovado; valor que devolve e o tipo dos
float t1, t2, tp1, tp2; parâmetros que recebe.

/* Leitura dos dados de entrada */


lerNotasAluno(&numAluno,&t1,&t2,&tp1,&tp2);
...
}

void lerNotasAluno(int * n, float * t1, float * t2, float * t3, float * t4) {
...
}
Implementação da função
Problema “Nota Final”
Implementação de funções – “lerNotasAluno” (2)

Função que não devolve nada (tipo void):


Procedimento

void lerNotasAluno(int * n, float * t1, float * t2, float * t3, float * t4) {
printf("Numero de aluno: ");
scanf("%d", n); Apontadores
printf("Notas dos testes (dois valores reais): ");
scanf("%f%f", t1, t2);
printf("Notas dos trabalhos (dois valores reais: ");
scanf("%f%f", t3, t4);
} Parâmetros por referência: São valores que
podem ser alterados dentro da função.
Apontadores
N - é uma variável que guarda o endereço de memória onde vai
armazenar um inteiro
t1, t2, t3 e t4 - são variáveis que guardam o endereço de memória
onde vai armazenar reais
Problema “Nota Final”
Desenho do algoritmo – Identificação de funções (2)

/* Programa da nota final */


...
int main(){
int numAluno, notaFinal, aprovado;
float t1, t2, tp1, tp2;

/* Leitura dos dados de entrada */


lerNotasAluno(&numAluno,&t1,&t2,&tp1,&tp2);
/* Calculo de resultados */
notaFinal = calculaNota(t1,t2,tp1,tp2);
aprovado = eAprovado(notaFinal);
/* Escrita dos resultados */
... Funções por implementar:
return 0; “calculaNota”
} “eAprovado”
Problema “Nota Final”
Implementação de funções

Algoritmos para o cálculo da nota final e condição de aprovação

Nota Final = 0,15*T1 + 0,45*T2 + 0,25*TP1 + 0,15*TP2 (1)


Aprovado = 1 se Nota Final >=10
Aprovado = 0 se Nota Final <10

Nota: o resultado da operação (1) é um valor real que necessita ser


arredondado às unidades para o cálculo da nota final.
Calcular as duas primeiras casas decimais. Se maior ou igual a 45,
arredondar para cima o valor inteiro da nota final.
Problema “Nota Final”
Dados do problema - Constantes simbólicas

/* Programa da nota final */ Constantes:


% de nota T1 = 15 %
... % de nota T2 = 45 %
% de nota TP1 = 25 %
% de nota TP2 = 15 %
#define PERT1 0.15 nota de aprovação >= 10
#define PERT2 0.45
#define PERTP1 0.25
#define PERTP2 0.15
#define APROVADO 10

int main(){
...
return 0;
}
Problema “Nota Final”
Implementação de funções – “calculaNota”

...
#define PERT1 0.15 Novas constantes
#define PERT2 0.45
#define PERTP1 0.25
#define PERTP2 0.15 Protótipo da função: indica o tipo do
#define APROVADO 10 valor que devolve e o tipo dos
#define CENTENAS 100 parâmetros que recebe.
#define ARREDONDA 45

/* calcula a nota final */


int calculaNota(float t1, float t2, float tp1, float tp2);

int main(){
... Implementação da função
notaFinal = calculaNota(t1,t2,tp1,tp2);
...
}
int calculaNota(float t1, float t2, float tp1, float tp2){
float nota = t1*PERT1 + t2*PERT2 + tp1*PERTP1 + tp2*PERTP2;
int resto = (int)((nota - (int) nota) * CENTENAS);
if (resto <= ARREDONDA)
return (int) nota;
return (int) (nota+1);
}
Problema “Nota Final”
Implementação de funções – “eAprovado”

...
#define PERT1 0.15
#define PERT2 0.45
#define PERTP1 0.25 Protótipo da função: indica o tipo do
#define PERTP2 0.15 valor que devolve e o tipo dos
#define APROVADO 10
#define CENTENAS 100
parâmetros que recebe.
#define ARREDONDA 45
...
/* indica se a nota é aprovada */
int eAprovado(int nota);

int main(){
...
aprovado = eAprovado(notaFinal);
... Implementação da função
}
...
int eAprovado(int nota){
if (nota >= APROVADO)
return 1;
return 0;
}

Você também pode gostar