220 likes | 371 Views
Vetores, Matrizes e Funções. Linguagem C. Revisão de Funções. O que são “Funções”? (ou subprogramas ou subrotinas ) São trechos de código fonte agrupados sob um nome , que podem ser chamados sempre que for necessário executar uma determinada ação programada neste trecho ;
E N D
Vetores, Matrizes e Funções Linguagem C
Revisão de Funções • O que são “Funções”? (ou subprogramas ou subrotinas) • São trechos de códigofonteagrupados sob um nome, quepodem ser chamadossempreque for necessárioexecutarumadeterminadaaçãoprogramadanestetrecho; • Como usarfunções? • Atribui-se um nome à uma seqüência de comandos, e faz-se referência a este nome nos vários lugares do programa onde a seqüência em questão deveria ser repetida.
Revisão de Funções • Por que usar funções? • Evita escrita repetida de código (uma certa seqüência de comandos deve ser repetida em vários lugares de um programa). • Economiza o tempo gasto com o trabalho de copiar estas seqüências; • Evitar a necessidade de mudaremmúltiploslugarescasodesejealterar o seufuncionamento; • Dividir grandes tarefas de computação em tarefas menores: • Facilita o gerenciamento de grandes sistemas e • Aumenta a confiabilidade dos mesmos. • Resumo: Principais motivações para uso das funções! • Evitar repetição de código • Modularização
Revisão de Funções • Função simples: void sai_do_programa() { printf(“Digitequalquerteclaparasair do programa.\n”); system(“pause”); exit(0); } Chamada: sai_do_programa();
Revisão de Funções • Função com parâmetro: void imprime_quadrado(int n) { printf(“O quadrado de %d eh %d.\n”,n, n*n); } Chamada: imprime_quadrado(5); Saída: O quadrado de 5 eh 25
Revisão de Funções • Função com parâmetro e retorno: intquadrado(int n) { int q; q = n * n; return(q); } Chamada: printf(“O quadrado de %d eh %d.\n”, 5, quadrado(5) ); Saída: O quadrado de 5 eh 25
Revisão de Funções • Função com parâmetro e retorno: intquadrado(int n) { int q; q = n * n; return(q); } Chamada: inti; for(i=1;i<5;i++) printf(“O quadrado de %d eh %d.\n”, 5, quadrado(5) ); Saída: O quadrado de 1 eh 1 O quadrado de 2 eh 4 O quadrado de 3 eh 9 O quadrado de 4 eh 16
Revisão de Funções • Função com diversos parâmetros e retorno: intpotencia(int n, int p) { inti,resultado=1; for(i=1;i<=p;i++) resultado = resultado * n; return(resultado); } Chamada: printf(“%d elevado a %d vale %d.\n”,2,4,potencia(2,4)); Saída: 2 elevado a 4 vale 16
Revisão de Funções • Função com diversos parâmetros e retorno: intpotencia(int n, int p) { inti,resultado=1; for(i=1;i<=p;i++) resultado = resultado * n; return(resultado); } Chamada: inti; for(i=1;i<5;i++) printf(“%d elevado a %d vale %d.\n”,2,i,potencia(2,i)); Saída: 2 elevado a 1 vale 1 2 elevado a 2 vale 4 2 elevado a 3 vale 8 2 elevado a 4 vale 16
Revisão de Funções • Posicionamento das funções no programa C: • Sempre antes dafunção main() • Casoqueiracolocar as funçõesapós a função main(), é precisocolocar um “protótipo” dafunção antes dafunção main()!!!! • (Mas o que é um protótipo de função?.....) • …é a descriçãodafunção! • Ex: função “sai_do_programa” void sai_do_programa() { printf(“Digitequalquerteclaparasair do programa.\n”); system(“pause”); exit(0); } • Protótipodafunção “sai_do_programa”: void sai_do_programa();
Revisão de Funções • Posicionamento das funções no programa C: Ex2: função “quadrado” intquadrado(int n) { int q; q = n * n; return(q); } • Protótipodafunção “quadrado”: intquadrado(int n);
Revisão de Vetores • Vetores são Estruturas de DadosHomegêneas, isto é, capazes de armazenar uma quantidade pré-definida de valores do mesmo tipo • Necessitam de apenas um índice de acesso. • Declaração: tipo nomedovetor[DimMax]; Onde: • tipo:um dos tipos primitivos de dados em C (char, int, float, double) • nomedovetor: segue as mesmas regras das variáveis básicas • DimMax: define o número máximo de elementos do vetor pode ser uma expressão constante inteira
Revisão de Vetores #include <stdio.h> #include <stdlib.h> #define NUM_ALUNOS 3 int main( ) { float notas [NUM_ALUNOS]; float media_turma = 0.0; int i; for ( i = 0; i < NUM_ALUNOS; i++ ) { printf ("Digite a nota do %d o. aluno: ", i+1); scanf ("%f", ¬as[i]); } for ( i = 0; i < NUM_ALUNOS; i++ ) { media_turma += notas[i]; } media_turma = media_turma / NUM_ALUNOS ; printf ("A media da turma eh %.2f \n", media_turma); system ("Pause"); return 0; }
Vetores e Funções #include <stdio.h> #include <stdlib.h> #define NUM_ALUNOS 3 float media ( float notas[], int n ) { inti = 0; float m = 0.0; for ( i = 0; i < n; i++ ) { m = m + notas[i] ; } m = m / n; return m; } int main( ) { float notas [NUM_ALUNOS]; float media_turma; int i; for ( i = 0; i < NUM_ALUNOS; i++ ) { printf ("Digite a nota do %d o. aluno: ", i+1); scanf ("%f", ¬as[i]); } media_turma = media ( notas, NUM_ALUNOS ); printf ("A media da turma eh %.2f \n", media_turma); system ("Pause"); return 0; }
Vetores e Funções #include <stdio.h> #include <stdlib.h> #define NUM_ALUNOS 3 float media ( float notas[], int n ) { inti = 0; float m = 0.0; for ( i = 0; i < n; i++ ) { m = m + notas[i] ; } m = m / n; return m; } • E para calcular o número de alunos com notas acima da média? • A função de cálculo de média pode ser a mesma já utilizada..... • E agora criamos a função de cálculo da quantidade de alunos acima da média!
Vetores e Funções intconta_alunos_acima_da_media ( float notas[], int n, float media) { inti, conta = 0; for ( i = 0; i < n; i++ ) { if (notas[i] > media) { conta += 1; } } return conta; }
Vetores e Funções int main( ) { float notas [NUM_ALUNOS]; float media_turma; int i, melhores_alunos; for ( i = 0; i < NUM_ALUNOS; i++ ) { printf ("Digite a nota do %d o. aluno: ", i+1); scanf ("%f", ¬as[i]); } media_turma = media ( notas, NUM_ALUNOS ); printf ("A media da turma eh %.2f \n", media_turma); melhores_alunos=conta_alunos_acima_da_ media(notas, NUM_ALUNOS, media_turma); printf (“E o numero de alunos com nota acima da media foi: %d .\n”, melhores_alunos); system ("Pause"); return 0; }
Vetores e Funções • Desafio 1: Alterar o programa anterior para: • Receber duas notas bimestrais de cada aluno; • Verificar se cada nota está entre 0.0 e 10.0; • Calcular a média de cada aluno (e armazenar o valor em um vetor); • Modificar o programa para apresentar os seguintes resultados: • média geral da turma; • número de alunos com média individual acima da média da turma.
Matrizes e Funções • Será que é possível “passar matrizes” por parâmetro? • Se sim, como?
Matrizes e Funções #include <stdio.h> #include <stdlib.h> #define NUM_ALUNOS 3 int main() { float notas [NUM_ALUNOS][2], media_turma; int i; for ( i = 0; i < NUM_ALUNOS; i++ ) { printf ("Digite a 1a. nota do %d o. aluno \n: ", i+1); scanf ("%f", ¬as[i][0]); printf ("Digite a 2a. nota do %d o. aluno \n: ", i+1); scanf ("%f", ¬as[i][1]); } media_turma = media_geral ( notas, NUM_ALUNOS ); printf ( "A media da turma eh %.2f \n", media_turma); system ("Pause"); return 0; }
Matrizes e Funções float media_geral ( float notas[][2], int n ) { int i = 0; float m = 0.0; float notaaluno = 0.0; for ( i = 0; i < n; i++ ) { notaaluno = ( notas[i][0] + notas[i][1] )/2; m = m + notaaluno; } m = m / n; return m; }
Exercício Complementar: • Elabore um programa que manipule os dados para uma sala de 40 alunos. • O programa deve receber como entrada (via leitura de teclado): • Os nomes dos alunos (máximo 50 caracteres). • As duas notas parciais. • O programa deve calcular e imprimir, numa mesma linha, para cada aluno: • O nome e a média final. • E também deve apresentar: • A maior média da turma, e a menor média da turma. • A quantidade de alunos aprovados, reprovados e em exame. • Uma listagem com o nome dos alunos que irão para a final.