PRG29002 - Programação I - Eng.Telecom 2018-1
Dados importantes
- Professor da Disciplina: Heron Eduardo de Lima Ávila
- Email: heron.avila@ifsc.edu.br
- Atendimento paralelo: quartas das 14:30 às 15:30 na Sala dos Professores de Tele II
Substituído por:
- Professor da Disciplina: Eraldo Silveira e Silva
- Email: [1]
- Atendimento paralelo:
- quartas das 10:45 às 11:45 na Sala dos Professores de Tele I
- quintas das 15:30 às 16:30 na Sala dos Professores de Tele I
Dados da Disciplina
- Ementa da disciplina na wiki: Engenharia de Telecomunicações 2ª Fase
- Página no moodle: moodle
- Monitoria: Programa_de_monitoria_dos_cursos_superiores_de_Telecomunicações
Algoritmos utilizando fluxograma
Introdução aos algoritmos utilizando fluxograma
Introdução aos algoritmos utilizando fluxograma |
---|
|
Desenvolvendo algoritmos na forma de fluxogramas
Desenvolvendo algoritmos na forma de fluxogramas |
---|
Exercícios para resolver em sala de aula:
|
Pseudo-código
Pseudo-código utilizando Portugol - Introdução e condicionais
- Slides sobre pseudocódigo disponibilizados no moodle.
Ver exemplos de códigos Portugol dentro do software portugol (menu Arquivo->Abrir exemplo)
Desenvolvendo algoritmos na forma de pseudo-código - condicionais |
---|
Exercícios para resolver em sala de aula:
|
Desenvolvendo algoritmos na forma de pseudo-código - repetição |
---|
|
Pseudo-código utilizando Portugol - repetições
Exercícios - Pseudocodigo (série 1) |
---|
Exercícios - Pseudocodigo (série 1):
|
Pseudo-código utilizando Portugol - sub-rotinas e registros
Exercícios - Pseudocodigo (série 3) | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Exercícios - Pseudocodigo (série 3):
Parte da implementação do problema das funções trigonométricas
|
Projeto final
O aluno deve propor ao professor um projeto de sua preferência que respeite os requisitos mínimos. Sendo aceito deverá desenvolver o projeto e apresentá-lo.
Requisitos mínimos
- Utilizar funções (ao menos três além do main, sendo que devem receber argumentos e possuir retorno);
- Apresentar menu utilizando switch case e conter laço infinito;
- Utilizar Structs ou Unions;
- Utilizar bibliotecas (além da stdio.h);
- Utilizar diretivas de pré-compilação;
- Utilizar comentários;
- Utilizar Ponteiros;
- Aceitar argumento de entrada no programa;
- Realizar acesso a arquivo, lendo e escrevendo informações (busque requisitos que requerem persistência de dados);
- Gravar informações de operações em log;
Modelo
- Trabalho individual
Metodologia
- Apresentar a proposta de projeto ao professor
- Opcional: Documentar o escopo do projeto utilizando descrição narrativa (descrição simples)
- Cenário
- Problema
- Dados de entrada e saída
- O planejamento do cronograma não será cobrado porém cabe ao aluno se organizar quanto ao tempo para entrega no prazo
- Desenvolver o projeto
- Apresentar individualmente ao professor
- Serão realizados testes diversos, arguido sobre o funcionamento, possibilidades de alterações, etc
Algumas ideias de projetos
- Sugestão geral: veja em outras disciplinas que processos podem ser automatizados e proponha um projeto que realiza esta tarefa como de cálculos diversos de eletrônica, de rádio transmissão, etc.
- Implementar o jogo Pedra, papel ou tesoura. Neste jogo dois ou mais jogadores em diferentes computadores devem rodar um aplicativo que fará a leitura de um arquivo compartilhado. O algoritmo deve tratar as etapas do jogo (Setup do aplicativo, entrada na sala, escolha da figura e apresentação do resultado)
- Implementar o jogo da velha escrevendo em arquivo. Neste jogo dois jogadores em diferentes computadores devem rodar um aplicativo que fará a leitura de um arquivo compartilhado. O algoritmo deve tratar as etapas do jogo (Setup do aplicativo, entrada na sala, seleção das casas e apresentação do resultado)
- Implementar controle de empréstimo de objetos. Neste software o usuário poderá digitar nomes de objetos que emprestou, a pessoa a quem emprestou e automaticamente o software guarda a data. Deve haver uma opção para gerar relatório dos itens emprestados e opção para marcar a devolução (podendo manter o registro em histórico ou apagando o registro).
- Implementar software gerador de lista de compras. Neste software o usuário poderá digitar itens de supermercado com nome e quantidade. O software escreve num arquivo que poderá depois ser impresso. O software também pode ter função de numa segunda execução já trazer a antiga listagem digitada e permitir que o usuário apenas selecione novas quantidades ou inclua novos itens.
- Implementar software para realização de cálculos de eletrônica. Neste software um menu apresenta várias opções de cálculo como de potencia através de tensão e corrente, como obtenção do valor de um resistor, como solução de equivalência de paralelo de vários resistores e outras. Num arquivo texto pode ser armazenado um histórico de operações realizadas.
- Implementação de software para apostas na mega sena. Neste software são dadas sugestões de números para apostas de acordo com o número do sorteio da mega sena. Com este histórico armazenado é possível então entrar com um número de sorteio e digitar quais foram os números verdadeiramente sorteados na loteria federal checagem os acertos.
Referências
Referências bibliográficas |
---|
|
Ferramentas úteis |
---|
|
Plano de aula
Aula | Data | Horas | Conteúdo | Recursos | |
---|---|---|---|---|---|
1 | 15/2 | 2 | Aula inaugural, apresentação do professor e turma, apresentação da disciplina e introdução aos algoritmos | Sala 10 | |
2 | 19/2 | 2 | Prática de fluxogramas | Lab. Informática, Turma A [13:30 às 15:20], Turma B [15:40 às 17h30] (máximo 11 alunos por turma) | |
3 | 22/2 | 2 | Exercícios de fluxogramas | Sala 10 | |
4 | 26/2 | 2 | Introdução ao pseudocódigo até condicionais com resolução de exercícios | Lab. Informática, Turma A [13:30 às 15:20], Turma B [15:40 às 17h30] (máximo 11 alunos por turma) | |
5 | 1/3 | 2 | Resolução de problemas em pseudocódigo e fluxogramas (declaração de variáveis, leia e escreva, uso de condicionais e biblioteca portugol): Exercícios de preparação para a prova | Sala 10 | |
6 | 5/3 | 2 | Avaliação1a: Introdução a algoritmos (fluxograma e pseudocódigo) | Lab Redes 1 | |
7 | 8/3 | 2 | Correção da Avaliação 1a | Lab Redes 1 | |
8 | 12/3 | 2 | Pseudocódigo: Uso de vetores e sub-rotinas com resolução de exercícios | Lab Redes 1 | |
9 | 15/3 | 2 | Pseudocódigo: Registros e revisão geral | Lab Redes 1 | |
10 | 22/3 | 2 | Avaliação1b: Pseudocódigo: vetores, sub-rotinas e registros | Lab Redes 1 | |
11 | 26/3 | 2 | Correção da Avaliação 1b | Lab Redes 1 | |
12 | 29/3 | 2 | Recuperação1? / Introdução ao C, primeiros conceitos de compilação, variáveis, controle de fluxo, entrada e saída de dados | Lab Redes 1 | |
13 | 2/4 | 2 | Continuação C, condicionais, operadores relacionais, operadores lógicos. Prática: Controle de fluxo em C, entrada e saída de dados | Lab Redes 1 | |
14 | 5/4 | 2 | Prática C | Lab Redes 1 | |
15 | 9/4 | 2 | Continuação C: estruturas de repetição | Lab Redes 1 | |
16 | 12/4 | 2 | Prática: estruturas de repetição | Lab Redes 1 | |
17 | 16/4 | 2 | Continuação C: funções | Lab Redes 1 | |
18 | 19/4 | 2 | Prática: Funções em C | Lab Redes 1 | |
19 | 23/4 | 2 | Avaliação2: C até funções | Lab Redes 1 | |
20 | 26/4 | 2 | Correção da prova | Lab Redes 1 | |
21 | 3/5 | 2 | Recuperação2? / Prática para resolução de exercícios | Lab Redes 1 | |
22 | 7/5 | 2 | Introdução a vetores e matrizes em C. | Lab Redes 1 | |
23 | 10/5 | 2 | Resolução de exercícios de vetores Prática: Resolução de exercícios de fixação de vetores. | Lab Redes 1 | |
24 | 14/5 | 2 | Structs e Unions | Lab Redes 1 | |
25 | 17/5 | 2 | Prática: Structs e unions | Lab Redes 1 | |
26 | 21/5 | 2 | Prática: Structs e unions / Compreendendo melhor a função main e exit, gerando números pseudo-aleatórios, defines e operadores e precedências | Lab Redes 1 | |
27 | 24/5 | 2 | Ponteiros | Lab Redes 1 | |
28 | 28/5 | 2 | Prática: Exercicios ponteiros | Lab Redes 1 | |
29 | 4/6 | 2 | Vetor de Ponteiros e Ponteiro Para Estruturas, typedef, recursividade, apresentação do projeto | Lab Redes 1 | |
30 | 7/6 | 2 | Prática de Ponteiros e structs | Lab Redes 1 | |
31 | 11/6 | 2 | Avaliação: C até structs e ponteiros | Lab Redes 1 | |
32 | 14/6 | 2 | Prática: Correção da Avaliação / Desenvolvimento do projeto | Lab Redes 1 | |
33 | 18/6 | 2 | Apresentação do projeto. Prática: Desenvolvimento do Projeto | Lab Redes 1 | |
34 | 21/6 | 2 | Recuperação3? / Prática: Desenvolvimento do Projeto | Lab Redes 1 | |
35 | 25/6 | 2 | Prática: Desenvolvimento do Projeto | Lab Redes 1 | |
36 | 28/6 | 2 | Prática: Desenvolvimento do Projeto | Lab Redes 1 | |
37 | 2/7 | 2 | Avaliação4: Apresentação do projeto | Lab Redes 1 | |
38 | 5/7 | 2 | Encerramento da disciplina / Recuperação4? | Lab Redes 1 | |
TOTAL | 76 |
AULA XX - DIA 12/03/2018
- Revisão Pseudicódigo
- Uso do Portugol
- Declaração de variáveis e atribuição
- Operadores aritméticos, relacionais e lógicos
- Comandos Condicionais
- Comandos de Repetição
Material de Referência
- Slides Cleber/Heron;
Exercícios
- Desenvolve um algoritmo na forma de pseudo-código para que 3 números seja lidos para as variáveis A,B e C. Na sequência os valores das variáveis devem ser trocados. O que estava em A vai para B, o que estava em B colocar C e o que estava em C em A. Imprimir os valores de A,B,C para conferir.
algoritmo
declare A,B,C,AUX numerico
escreva "Entre com A"
leia A
escreva "Entre com B"
leia B
escreva "Entre com C"
leia C
AUX<-B
B<-A
A<-C
C<-AUX
escreva "VALOR DE A = ", A
escreva "VALOR DE B = ", B
escreva "VALOR DE C = ", C
fim_algoritmo
</syntaxhighlight>
- Desenvolve um algoritmo na forma de pseudo-código para cálculo da média de dois números fracionários exibindo o resultado
algoritmo
declare NUM1, NUM2,MEDIA numerico
escreva "Entre com NUM1"
leia NUM1
escreva "Entre com NUM2"
leia NUM2
MEDIA <- (NUM1+NUM2)/2
escreva " media de ", NUM1, " com ", NUM2, " é ", MEDIA
fim_algoritmo
</syntaxhighlight>
- Desenvolva um algoritmo para calcular o DELTA de uma equação do segundo grau:
algoritmo
declare DELTA, A,B,C numerico
escreva "Entre com A"
leia A
escreva "Entre com B"
leia B
escreva "ENTRE COM C"
leia C
DELTA <- B * B - 4 * A * C
escreva " DELTA é ", DELTA
fim_algoritmo
</syntaxhighlight>
- Desenvolva um programa para calcular as raízes de uma equação do segundo grau. Trata-se da aplicação de um comando CONDICIONAL
algoritmo
declare DELTA, A,B,C,RAIZ1,RAIZ2 numerico
escreva "Entre com A"
leia A
escreva "Entre com B"
leia B
escreva "ENTRE COM C"
leia C
DELTA <- B * B - 4 * A * C
escreva " DELTA é ", DELTA
se DELTA < 0 entao
escreva "raízes imaginárias"
senao se DELTA = 0 entao
inicio
RAIZ1 <- -b/2*a
escreva "raizes iguais com valor ", RAIZ1
fim
senao
inicio
RAIZ1 <- (-B+raiz_quadrada(DELTA))/2*A
RAIZ2 <- (-B-raiz_quadrada(DELTA))/2*A
escreva "raiz um igual a ", RAIZ1
escreva "raiz um igual a ", RAIZ2
fim
fim_algoritmo</syntaxhighlight>. Consulte o TCC passado como referência para o cálculo da raiz.
- Desenvolva um programa para calcular o e-nésimo termo de uma progressão aritmética dados o primeiro termo (A1) e a razão (R).
</syntaxhighlight>
- Modifique o programa anterior para calcular a SOMA dos n primeiros termos, dados o primeiro termo (A1) e a razão (R). NÃO USAR a fórmula da soma e USAR o comando PARA.
- Desenvolva um programa para abrir uma porta caso a senha seja "ABCD". Se não for a senha correta uma mensagem será dada. Não precisa usar repetição. O código se executa uma única vez
algoritmo
declare SENHA literal
SENHA <- ""
escreva "entre com a senha"
leia SENHA
se SENHA = "ABCD" entao
escreva "Abra a porta"
senao
escreva "Nao abra a porta"
fim_algoritmo
</syntaxhighlight>
- Modificar o programa para validar a abertura da porta com o nome do usuário e com a senha.
- Modificar o programa para que se a pessoa errar a SENHA ela seja solicitada novamente.
- Desenvolver um programa para calcular a hipotenusa de um triângulo retângulo dado os catetos. Validar as entradas para garantir que os valores sejam positivos.
- Desenvolver um programa para desenhar um retângulo configurável da forma que se segue. O número de linhas com 'A' e o número de 'A's deve ser fornecido como entrada.
- AAAAAAAAAAAAAAAAAA*
- AAAAAAAAAAAAAAAAAA*
</syntaxhighlight>
AULA 9 - DIA 15/03/2018
TAREFA
- Estudar AULA 2 e 3 de Apostila de C - UFMG
AULA 10 - DIA 22/03/2018
AULA 11 - DIA 26/03/2018
AULA 12 - DIA 29/03/2018
Objetivos
- Revisão na forma de um exercício
- Instruções de Repetição
Exercício
- Fazer programa em C (sem copiar nada da wiki) que lê 5 números e mostra a quantidade de números lidos que é maior que a média destes números.
OBS1: lembrar que ainda não vimos vetores etc.
OBS2: Usar uma variável contador de apoio.
Instruções de Repetição
AULA 13 - DIA 2/04/2018
Objetivos
- Instruções de Repetição: finalização da aula anterior
- Exercícios
Exercício Sem Consulta
Exercícios Adicionais
1.Faça um programa para desenhar um gráfico de barras para um conjunto de 3 valores inteiros, conforme a saída abaixo
AULA 14 - DIA 5/04/2018
Objetivos da Aula
- Conceito de Funções
- Divisão de Problemas em Subproblemas
Conteúdo da Aula
AULA 15 - DIA 9/04/2018
Objetivos da Aula
- Exercícios de Preparação para Avaliação
QUESTÃO 1
Implementar uma função que calcula através de um loop a soma de todos os números naturais (inteiros começando em zero) até um dado número (inclusive) passado como parâmetro.
A equação matemática, o esqueleto da função e um código de teste é dado abaixo:
- include <stdio.h>
int soma_naturais(int numero)
{
int soma_nat=0;
int i;
/* implementar aqui*/
return soma_nat;
}
main()
{
printf("Para numero = %d tem=se soma = %d\n", 3, soma_naturais(3));
printf("Para numero = %d tem=se soma = %d\n", 10, soma_naturais(10));
printf("Para numero = %d tem=se soma = %d\n", 8, soma_naturais(8));
}
</syntaxhighlight>
QUESTÃO 2
Observe que a soma de números naturais é um problema conhecido: Ver https://pt.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF
Reimplemente a função acima usando a fórmula fornecida no link.
QUESTÃO 3
Implementar uma função que calcula o quadrado da soma de naturais conforme abaixo.
- include <stdio.h>
int quad_soma_naturais(int numero)
{
/* implementar aqui */
}
main()
{
printf("Para numero = %d tem=se quad_soma = %d\n", 3, quad_soma_naturais(3));
printf("Para numero = %d tem=se quad_soma = %d\n", 10, quad_soma_naturais(10));
printf("Para numero = %d tem=se quad_soma = %d\n", 8, quad_soma_naturais(8));
}
</syntaxhighlight>
QUESTÃO 4
Implementar uma função que calcula através de um loop a soma de todos os números naturais (inteiros começando em zero) até um dado número (inclusive) passado como parâmetro.
A equação matemática, o esqueleto da função e um código de teste é dado abaixo:
- include <stdio.h>
int soma_naturais(int numero)
{
/* implementação aqui */
}
int quad_soma_naturais(int numero)
{
/* implementação aqui */
}
int dif_soma_quad(int numero)
{
/* implementação aqui - reusar as funções já desenvolvidas
}
main()
{
printf("Para numero = %d tem=se dif_quad_soma = %d\n", 3, dif_soma_quad(3));
printf("Para numero = %d tem=se dif_quad_soma = %d\n", 10, dif_soma_quad(10));
printf("Para numero = %d tem=se dif_quad_soma = %d\n", 8, dif_soma_quad(8));
}
</syntaxhighlight>
QUESTÃO 5
Implemente um jogo de adivinhação em que o usuário deve adivinhar a soma de dois dados lançados pelo computador. O valor da cada dado deve ser mostrado e a soma dos mesmo no momento que o usuário adivinhar ou
após três chances de adivinhação. Use o comando do while e a função rand. Todo o teste para encerramento de loop deve estar na condição do while. Um esqueleto do programa é dado como apoio.
- include <stdio.h>
- include <stdlib.h>
- include <time.h>
int main ()
{
int dado1,dado2, soma, adivinhacao, tentativas=1;
/* initialize random seed: */
srand ( 0 /*time(NULL)*/ );
/* gera dado 1: */
dado1 = rand() % 6 + 1;
/* gera dado 2: */
dado2 = rand() % 6 + 1;
soma=dado1+dado2;
/* implementar aqui */
}
</syntaxhighlight>
AULA 16 - DIA 12/04/2018
Objetivos da Aula
- Exercícios
Exercício 1 - NÃO USAR FUNÇÕES
Três pessoas fizeram um churrasco. Cada uma delas comprou no mercado alguns dos produtos, gastando um determinado valor. Faça um programa que permita entrar com o valor gasto por cada uma das pessoas. Na sequência o programa deve calcular e mostrar o total de gastos, a média por pessoa e o quanto cada uma delas deve receber ou pagar. O programa deve dizer por exemplo: pessoa 1 deve pagar xxx, pessoa 2 deve receber xxx, pessoa 3 não precisa pagar.
Exercício 2
Melhorar o programa anterior fazendo uma função que permita verificar se uma pessoa precisa pagar ou receber, substituindo o código no programa principal nesta parte. A função deve imprimir a mensagem devidamente. A função deve também retornar o valor a receber ou pagar (negativo se for valor devido).
int testar_pessoa (float media_valor, float valor_pago, int pessoa)
Exercício 3
Considere a fórmula para cálculo de combinações com N (ver https://pt.wikipedia.org/wiki/Combina%C3%A7%C3%A3o_(matem%C3%A1tica)#F%C3%B3rmula):
Elaborar duas funções: (i) uma que calcula e retorna o fatorial de um número e (ii) outra que utiliza a função do fatorial para calcular e retornar a combinação N k a k. Segue esqueleto do programa:
- include <stdio.h>
int fatorial(int numero)
{
}
int combinacao(int N, int k)
{
}
main()
{
printf("Combinações 4 2 a 2 = %d\n", combinacao(4,2));
printf("Combinações 5 2 a 2 = %d\n", combinacao(5,2));
printf("Combinações 10 2 a 2 = %d\n", combinacao(10,2));
printf("Combinações 10 5 a 5 = %d\n", combinacao(10,5));
Exercício 4
Implementar uma função para calcular e retornar a soma de todos os números pares (positivos) compreendidos em uma dada faixa (inclusive os limites). A função deve retornar -1 caso o limite 2 seja menor que o limite 1. Ver protótipo abaixo:
- include <stdio,h>
int soma_pares(int lim1, lim2)
{
}
main()
{
printf("Soma dos pares na faixa de 1 a 10 é %d\n", soma_pares(1,10));
printf("Soma dos pares na faixa de 1 a 9 é %d\n", soma_pares(1,9));
printf("Soma dos pares na faixa de 5 a 9 é %d\n", soma_pares(5,9));
printf("Soma dos pares na faixa de 2 a 70 é %d\n", soma_pares(2,70));
}
</syntaxhighlight>
Exercício 5
Implementar uma função que calcula numericamente (usando loop) a integral definida da função da reta (ver [2]). Usar um comando while. A função deve ter o seguinte aspecto:
float integral_reta (float a, float b, float lim_inf, float lim_sup, float step)
{
}
</syntaxhighlight>
onde
a-> coeficiente angular
b-> coeficiente linear
lim_inf -> limite inferior da integração
lim_sup -> limite superiot da integração
step -> passo da integração
Exercícios Adicionais
A fórmula de Heron permite calcular a área de um triângulo dado os 3 lados (a, b e c) :
onde
Construa uma função que permita calcular e retornar a área do retângulo dado os 3 lados. Use a função matemática sqrtf para calcular a
raiz de um float (fazer man sqrtf para obter o manual.
- include <math.h>
float area_triang(float a, float b, float c)
{
/* Implementar aqui */
}
main()
{
printf ("area para os lados 4.5 7.8 9.6 é %f\n" area_triang(4.5,7.8,9.6));
}
</syntaxhighlight>
AULA 17 DIA 19/04/2018
- AVALIAÇÃO 2 - Introdução a Programação C
AULA 18 DIA 19/04/2018
AULA 19 DIA 23/04/2018
- Exercícios sobre Vetores de Float e Inteiros
Exercícios
- Considere que em um sistema de controle de acesso, as senhas de 11 alunos que acessam um laboratório são armazenadas em vetor de inteiros. O aluno para acessar fornece o seu identificador (user_id) que é um número inteiro de 0 a 10. No vetor está armazenada a senha de cada aluno na posição indexada pelo user_id. Faça no programa principal um programa que lê a senha e abre a porta caso a senha seja correta. Simule o abrir porta com um printf. Segue esqueleto do código. Considere que o vetor é inicializado de fábrica
#include <stdio.h>
int vetor_senhas[11]={234,210,149,21,5,78,97,535,1023,476};
main()
{
int user_id, /* variável para armazenar o user_id fornecido */;
senha; /* variável para armazenar a senha fornecida */;
printf("Entre com o user_id \n");
scanf("%d", &user_id);
printf("Entre com a senha \n");
scanf("%d", &user_id);
/* fazer aqui o código que confere a senha - testar o limite do vetor antes de acessar!! */
}
- Considere que as notas de matemática de alunos de uma escola são armazenadas por bimestre em 4 vetores: bim1, bim2,bim3 e bim4. Suponha que um aluno é identificado por um número inteiro que servirá como índice destes vetores. Construir funções que retornam: (1) a média anual da turma, (2) o desvio padrão das médias anuais da turma, (3) a média anual de um aluno dado seu índice na tabela. Na função main imprimir a média de cada aluno, a média da turma e o desvio padrão () da turma.
#define NUM_ALUNOS 6
float bim1[NUM_ALUNOS]={5.5,3.7,10.0,8.5,9.6,6.6};
float bim2[NUM_ALUNOS]={4.5,2.3,9.0,7.5,9.3,7.0};
float bim3[NUM_ALUNOS]={5.5,1.7,10.0,8.0,9.0,7.6};
float bim4[NUM_ALUNOS]={6.5,1.2,10.0,7.8,9.6,5.6};
float media_aluno(int aluno)
{
}
float media_turma()
{
}
float desvio_padrao()
{
}
main()
{
/* chamar aqui as funções e imprimir os retornos */
}
- Para o exercício anterior, construir na função main um código que calcula o número de alunos que estão dentro da faixa determinada pelo desvio padrão.
soluções
ex.1
Solução:#include <math.h>
#include <stdio.h>
#define NUM_ALUNOS 6
float bim1[NUM_ALUNOS]={5.5,3.7,10.0,8.5,9.6,6.6};
float bim2[NUM_ALUNOS]={4.5,2.3,9.0,7.5,9.3,7.0};
float bim3[NUM_ALUNOS]={5.5,1.7,10.0,8.0,9.0,7.6};
float bim4[NUM_ALUNOS]={6.5,1.2,10.0,7.8,9.6,5.6};
float media_aluno(int aluno)
{
float media;
media = (bim1[aluno]+bim2[aluno]+bim3[aluno]+bim4[aluno])/4;
return media;
}
float media_turma()
{
int i;
float media;
media = 0;
for (i=0;i<NUM_ALUNOS;i++)
media = media + media_aluno(i);
media = media/NUM_ALUNOS;
return media;
}
float desvio_padrao()
{
float media, prod;
int i;
media = media_turma();
prod=0;
for (i=0;i<NUM_ALUNOS;i++)
prod = powf(media_aluno(i)-media_turma(),2) + prod;
prod = sqrt(prod/NUM_ALUNOS);
return prod;
}
main()
{
/* chamar aqui as funções e imprimir os retornos */
printf("Media Anual do aluno 0 -> %.2f\n", media_aluno(0));
printf("Media Anual da Turma -> %.2f\n", media_turma());
printf("Desvio Padrão da Turma -> %.2f\n", desvio_padrao());
}
ex.2
main()
{
float desvp,lim_sup,lim_inf,media,aux;
int i,cont;
/* chamar aqui as funções e imprimir os retornos */
printf("Media Anual do aluno 0 -> %.2f\n", media_aluno(0));
printf("Media Anual da Turma -> %.2f\n", media=media_turma());
printf("Desvio Padrão da Turma -> %.2f\n", desvp=desvio_padrao());
cont=0;
lim_sup=media+desvp;
lim_inf=media-desvp;
for(i=0;i<NUM_ALUNOS;i++){
aux = media_aluno(i);
if (aux <= lim_sup && aux >= lim_inf)
cont++;
}
printf("Número de alunos dentro da faixa do desvio -> %d\n",cont);
}
soluções
ex.1
Solução:#include <math.h>
#include <stdio.h>
#define NUM_ALUNOS 6
float bim1[NUM_ALUNOS]={5.5,3.7,10.0,8.5,9.6,6.6};
float bim2[NUM_ALUNOS]={4.5,2.3,9.0,7.5,9.3,7.0};
float bim3[NUM_ALUNOS]={5.5,1.7,10.0,8.0,9.0,7.6};
float bim4[NUM_ALUNOS]={6.5,1.2,10.0,7.8,9.6,5.6};
float media_aluno(int aluno)
{
float media;
media = (bim1[aluno]+bim2[aluno]+bim3[aluno]+bim4[aluno])/4;
return media;
}
float media_turma()
{
int i;
float media;
media = 0;
for (i=0;i<NUM_ALUNOS;i++)
media = media + media_aluno(i);
media = media/NUM_ALUNOS;
return media;
}
float desvio_padrao()
{
float media, prod;
int i;
media = media_turma();
prod=0;
for (i=0;i<NUM_ALUNOS;i++)
prod = powf(media_aluno(i)-media_turma(),2) + prod;
prod = sqrt(prod/NUM_ALUNOS);
return prod;
}
main()
{
/* chamar aqui as funções e imprimir os retornos */
printf("Media Anual do aluno 0 -> %.2f\n", media_aluno(0));
printf("Media Anual da Turma -> %.2f\n", media_turma());
printf("Desvio Padrão da Turma -> %.2f\n", desvio_padrao());
}
ex.2
main()
{
float desvp,lim_sup,lim_inf,media,aux;
int i,cont;
/* chamar aqui as funções e imprimir os retornos */
printf("Media Anual do aluno 0 -> %.2f\n", media_aluno(0));
printf("Media Anual da Turma -> %.2f\n", media=media_turma());
printf("Desvio Padrão da Turma -> %.2f\n", desvp=desvio_padrao());
cont=0;
lim_sup=media+desvp;
lim_inf=media-desvp;
for(i=0;i<NUM_ALUNOS;i++){
aux = media_aluno(i);
if (aux <= lim_sup && aux >= lim_inf)
cont++;
}
printf("Número de alunos dentro da faixa do desvio -> %d\n",cont);
}