Baixe o app para aproveitar ainda mais
Prévia do material em texto
15/07/2013 1 João Monlevade, 15 de julho de 2013 Universidade Federal de Ouro Preto Campus João Monlevade Prof. Mateus Ferreira Satler CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Em diversas situações os tipos básicos de dados (inteiro, real, caracter, ....) não são suficientes para representar a informação que se deseja armazenar. ◦ Exemplo, uma palavra: “AULA”. ◦ Valor de 50 produtos em uma loja Existe a possibilidade de construção de novos tipos de dados a partir da composição (ou abstração) de tipos de dados primitivos. ◦ Esses novos tipos têm um formato denominado ESTRUTURA DE DADOS, que define como os tipos primitivos estão organizados. 2 15/07/2013 2 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Problema 1 ◦ Como poderíamos fazer um algoritmo para ler 50 notas de uma turma e calcular sua média? 3 int main () { int i; //variável de controle float nota, media, soma = 0; for (i = 1; i <= 50; i=i+1) { printf("Digite uma nota:"); scanf(“%f”, ¬a); soma = soma + nota; } media = soma/50; printf("Media = %f", media); return 0; } Problema: Qual o valor da 1ª, ou 5ª ou 40ª nota??? CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Problema 2 ◦ Fazer um programa para ler 50 notas de uma turma e calcular a sua média. Imprimir as notas lidas juntamente com a média da turma como na tabela. 4 Nota Média 8,0 7,75 4,6 7,75 2,3 7,75 3,7 7,75 7,8 7,75 9,0 7,75 ... ... • Como fazê-lo? No exemplo anterior, uma nota é sobreposta por outra em cada iteração do para. • A solução é armazenar todas as 50 notas lidas... Mas como?!? 15/07/2013 3 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Quando uma determinada estrutura de dados for composta de variáveis com o mesmo tipo primitivo, temos um conjunto homogêneo de dados. Essas variáveis são chamadas de variáveis compostas homogêneas. 5 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Variáveis Compostas Homogêneas Unidimensionais (Vetores) ◦ As variáveis compostas homogêneas unidimensionais são utilizadas para representar arranjos unidimensionais de elementos de um mesmo tipo, em outras palavras, são utilizadas para representar vetores. 6 15/07/2013 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER A sintaxe para declaração de uma variável deste tipo em C é a seguinte: tipo identificador [qtd de elementos]; Exemplo: vetor com 5 elementos do tipo inteiro int dados [5]; 7 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Cada um dos elementos de um vetor é referenciado individualmente por meio de um número inteiro entre colchetes após o nome do vetor. Exemplo: dados 8 Considerando o vetor dados, quais valores serão atribuídos a X e Y nos exemplos abaixo??? X = dados[1]; Y = dados[4]; 3 2 4 7 1 0 1 2 3 4 A instrução abaixo atribui um valor ao elemento 0 (zero) do vetor dados: dados[0] = 6; I = 0; dados[i] = 6; 15/07/2013 5 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER O programa a seguir, usa o comando for para inicializar com zeros os elementos de um array inteiro n de 10 elementos e o imprime sob a forma de uma tabela. 9 int main() { int n[10], i; for (i=0; i<= 9; i++) { n[i] = 0; } printf("%s%13s\n","Elemento", "Valor"); for (i=0; i<= 9; i++) { printf("%7d%13d\n",i,n[i]); } return 0; } CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER O programa abaixo inicializa os dez elementos de um array s com os valores: 2, 4, 6, ..., 20 e imprime o array em um formato de tabela. 10 #define TAMANHO 10 int main() { int s[TAMANHO], j; for (j=0; j<= TAMANHO - 1; j++) { s[j] = 2 + 2*j; } printf("%s%13s\n","Elemento", "Valor"); for (j=0; j<= TAMANHO - 1; j++) { printf("%8d%13d\n",j,s[j]); } return 0; } 15/07/2013 6 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER É possível fornecer valores a cada elemento de um vetor no momento da sua declaração. Exemplo: ◦ float valores[5] = {3.6, 2.7, 4.2, 7.9, 1.2}; ◦ float numeros[5] = {3.1}; //Como fica o vetor ??????? 11 3.6 2.7 4.2 7.9 1.2 0 1 2 3 4 valores 3.1 0.0 0.0 0.0 0.0 0 1 2 3 4 numeros CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Observações: ◦ Os vetores NÃO são automaticamente inicializados!!! ◦ Se houver menos valores do que o número de elementos do vetor , os elementos restantes são inicializados automaticamente com o valor zero. int n[5] = {32, 64, 27}; ◦ A seguinte declaração causa um erro de sintaxe: int n[5] = {32, 64, 27, 18, 95, 14}; ◦ O tamanho do vetores pode ser omitido: int n[ ] = {1, 2, 3, 4, 5}; 12 15/07/2013 7 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Em C, vetores são passados SEMPRE por referência. O tamanho do vetor pode ser omitido. 13 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER No exemplo abaixo é apresentado um procedimento imprimeVetor que imprime um vetor de tamanho tam. 14 #include <stdio.h> #define TAMANHO 10 void imprimeVetor (int vet[], int tam) { int i; for (i = 0; i <= tam - 1; i++) { printf("%d\n", vet[i]); } } int main() { int s[TAMANHO], i; for (i = 0; i <= TAMANHO - 1; i++) { printf ("Informe o valor do vetor na posição %d: ", i); scanf (“%d", &s[i]); } imprimeVetor(s, TAMANHO); return 0; } 15/07/2013 8 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Vamos ver agora o teste de mesa para o seguinte problema: ◦ Criar uma função que receba um vetor de números reais e seu tamanho e retorne o índice do maior valor contido no vetor. Se houver mais de uma ocorrência do maior valor, retornar o índice do primeiro. Faça um programa principal para testar a função. 15 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER16 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } 15/07/2013 9 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER17 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Inicialmente são criadas as variáveis CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER18 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Chama a função encontraMaior 15/07/2013 10 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER19 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice= 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Vetor e seu Vetor e seu tamanho são passados como parâmetro CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER20 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Variáveis locais da função são inicializadas Variáveis: maior = 3.0 indice = 0 15/07/2013 11 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER21 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Começa a busca pelo índice 1, uma vez que o índice zero já foi utilizada para inicializar a variável indice Variáveis: maior = 3.0 indice = 0 i = 1 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER22 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( 4.3 > 3.0) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Executa o primeiro teste Variáveis: maior = 3.0 indice = 0 i = 1 15/07/2013 12 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER23 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( 4.3 > 3.0) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Sendo o teste verdadeiro, atualiza variáveis maior e indice. Variáveis: maior = 4.3 indice = 1 i = 1 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER24 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Passa para a próxima iteração do loop. Variáveis: maior = 4.3 indice = 1 i = 2 15/07/2013 13 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER25 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( 5.6 > 4.3) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Mais um teste verdadeiro. Variáveis: maior = 4.3 indice = 1 i = 2 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER26 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( 4.3 > 3.0) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Sendo o teste verdadeiro, atualiza variáveis maior e indice. Variáveis: maior = 5.6 indice = 2 i = 2 15/07/2013 14 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER27 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Passa para a próxima iteração do loop. Variáveis: maior = 5.6 indice = 2 i = 3 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER28 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( 2.8 > 5.6) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Valor do vetor é menor, não entra na condição. Variáveis: maior = 5.6 indice = 2 i = 3 15/07/2013 15 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER29 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Passa para a próxima iteração do loop. Variáveis: maior = 5.6 indice = 2 i = 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER30 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( 7.9 > 5.6) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Mais um teste verdadeiro. Variáveis: maior = 5.6 indice = 2 i = 4 15/07/2013 16 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER31 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( 4.3 > 3.0) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Sendo o teste verdadeiro, atualiza variáveis maior e indice. Variáveis: maior = 7.9 indice = 4 i = 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER32 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Passa para a penúltima iteração do loop. Variáveis:maior = 7.9 indice = 4 i = 5 15/07/2013 17 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER33 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( 3.4 > 7.9) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Valor do vetor é menor, não entra na condição. Variáveis: maior = 7.9 indice = 4 i = 5 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER34 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Passa para a última iteração do loop (nesse caso, não entra). Variáveis: maior = 7.9 indice = 4 i = 6 15/07/2013 18 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER35 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return 4; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Retorna o índice do maior valor. Variáveis: maior = 7.9 indice = 4 i = 6 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER36 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Volta para a função principal, pegando o retorno do índice do maior valor posicao = 4 15/07/2013 19 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER37 int encontraMaior (float vet [], int tam) { int indice, i; float maior = vet[0]; indice = 0; for (i = 1; i < tam; i++) { if( vet[i] > maior) { maior = vet[i]; indice = i; } } return indice; } int main () { float vetor[6] = {3.0, 4.3, 5.6, 2.8, 7.9, 3.4}; int posicao; posicao = encontraMaior(vetor, 6); printf("Maior valor esta na posicao %d", posicao); return 0; } Imprime o índice do maior valor posicao = 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER Vamos ver agora o teste de mesa para o seguinte problema: ◦ Criar um procedimento em C que receba um vetor de números reais e um valor inteiro representando o seu tamanho. Esse procedimento deverá ordenar o vetor em ordem crescente. 38 15/07/2013 20 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER39 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER40 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Vamos supor para esse exercício que o vetor de entrada tenha 5 posições e os seguintes valores 11.0, 22.0, 3.0, 44.0, 5.0 15/07/2013 21 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER41 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 11.0 22.0 3.0 44.0 5.0 0 1 2 3 4 Inicialmente o procedimento é chamado passando-se os valores propostos CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER42 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = j = aux = 11.0 22.0 3.0 44.0 5.0 0 1 2 3 4 A seguir são criadas as variáveis auxiliares 15/07/2013 22 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER43 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = aux = 11.0 22.0 3.0 44.0 5.0 0 1 2 3 4 A ideia central é ir “puxando” os menores valores através de trocas para o início do vetor CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER44 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 4 aux = 11.0 22.0 3.0 44.0 5.0 0 1 2 3 4 É no loop interno que iremos iterar sobre o vetor efetuando essas trocas, conforme os menores valores forem sendo identificados. Repare que iremos iterar do último elemento até o elemento i+1. 15/07/2013 23 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER45 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 44.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 4 aux = 11.0 22.0 3.0 44.0 5.0 0 1 2 3 4 Os testes são feitos sempre entre os valores i e o seu antecessor (i-1) CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER46 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 44.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 4 aux = 5.0 11.0 22.0 3.0 44.0 5.0 0 1 2 3 4 Como é menor, efetua a troca. 15/07/2013 24 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER47 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 44.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 4 aux = 5.0 11.0 22.0 3.0 44.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER48 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 44.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 4 aux = 5.0 11.0 22.0 3.0 5.0 44.0 0 1 2 3 4 15/07/2013 25 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER49 void ordena(float vet[], int tam) {int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 3 aux = 5.0 11.0 22.0 3.0 5.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER50 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 3.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 3 aux = 5.0 11.0 22.0 3.0 5.0 44.0 0 1 2 3 4 Aqui o teste falha. Vai para a próxima iteração do loop interno. 15/07/2013 26 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER51 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 2 aux = 5.0 11.0 22.0 3.0 5.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER52 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 3.0 < 22.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 2 aux = 5.0 11.0 22.0 3.0 5.0 44.0 0 1 2 3 4 15/07/2013 27 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER53 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 3.0 < 22.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 2 aux = 3.0 11.0 3.0 22.0 5.0 44.0 0 1 2 3 4 Como valor é menor, efetua a troca como visto anteriormente. CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER54 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 1 aux = 3.0 11.0 3.0 22.0 5.0 44.0 0 1 2 3 4 15/07/2013 28 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER55 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 3.0 < 11.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 1 aux = 3.0 11.0 3.0 22.0 5.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER56 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 3.0 < 11.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 1 aux = 3.0 3.0 11.0 22.0 5.0 44.0 0 1 2 3 4 Como valor é menor, efetua a troca como visto anteriormente. 15/07/2013 29 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER57 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 0 j = 0 aux = 3.0 3.0 11.0 22.0 5.0 44.0 0 1 2 3 4 Nesse ponto, como j = 0, saiu do laço interno e volta para o externo. CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER58 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 0 aux = 3.0 3.0 11.0 22.0 5.0 44.0 0 1 2 3 4 Como o i é incrementado, a posição 0 do vetor não será mais modificada 15/07/2013 30 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER59 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 4 aux = 3.0 3.0 11.0 22.0 5.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER60 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 44.0 < 5.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 4 aux = 3.0 3.0 11.0 22.0 5.0 44.0 0 1 2 3 4 15/07/2013 31 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER61 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 3 aux = 3.0 3.0 11.0 22.0 5.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER62 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 22.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 3 aux = 3.0 3.0 11.0 22.0 5.0 44.0 0 1 2 3 4 15/07/2013 32 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER63 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 22.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 3 aux = 5.0 3.0 11.0 5.0 22.0 44.0 0 1 2 3 4 Como valor é menor, efetua a troca como visto anteriormente. CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER64 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 2 aux = 5.0 3.0 11.0 5.0 22.0 44.0 0 1 2 3 4 15/07/2013 33 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER65 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 11.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 2 aux = 5.0 3.0 11.0 5.0 22.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER66 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 5.0 < 11.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 2 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 Como valor é menor, efetua a troca como visto anteriormente. 15/07/2013 34 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER67 void ordena(float vet[], int tam) { int i, j;float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 1 j = 1 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 Nesse ponto, como j = 1, saiu do laço interno e volta para o externo. CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER68 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 2 j = 1 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 Como o i é incrementado, a posição 1 do vetor não será mais modificada 15/07/2013 35 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER69 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 44.0 < 22.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 2 j = 4 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER70 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 22.0 < 11.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 2 j = 3 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 15/07/2013 36 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER71 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 2 j = 2 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 Nesse ponto, como j = 2, saiu do laço interno e volta para o externo. CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER72 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 3 j = 2 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 Como o i é incrementado, a posição 2 do vetor não será mais modificada 15/07/2013 37 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER73 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( 44.0 < 22.0 ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 3 j = 4 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER74 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 3 j = 3 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 Nesse ponto, como j = 3, saiu do laço interno e volta para o externo. 15/07/2013 38 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER75 void ordena(float vet[], int tam) { int i, j; float aux; for(i = 0; i <= (tam-2); i++) { for(j = tam-1; j > i; j--) { if ( vet[j] < vet[j-1] ) { aux=vet[j]; vet[j]= vet[j-1]; vet[j-1]=aux; } } } } Variáveis: tam = 5 i = 4 j = 3 aux = 5.0 3.0 5.0 11.0 22.0 44.0 0 1 2 3 4 O i é incrementado e sai do laço externo, finalizando o procedimento. CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 1. Quais são os elementos do vetor referenciados pelas expressões abaixo ? vet a) vet[3] b) vet[0] c) vet[13] 2. Qual é a diferença entre os números “3” das duas instruções abaixo? int vet [3]; vet[3] = 5; 76 1 2 4 7 4 2 8 9 0 6 5 4 3 15/07/2013 39 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 3. Dada um tabela contendo a idade de 10 alunos, faça um programa que calcule o número de alunos com idade superior a média. 4. Faça um programa para ler e somar dois vetores de 10 elementos inteiros. Imprima ao final os valores dessa soma, elemento a elemento. 5. Refaça o exercício anterior criando um procedimento para efetuar a leitura dos vetores e um segundo procedimento que imprimirá a soma dos vetores. 77 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 6. Refaça o exercício anterior criando uma função que receba o vetor com a idade dos alunos e retorne a quantidade de alunos com idade superior a média. 7. Faça um programa que leia, via teclado, 20 valores do tipo inteiro e determine qual o menor valor existente no vetor e imprima valor e seu índice no vetor. 8. Refaça o exercício anterior criando um procedimento que receba como parâmetro o vetor e imprima o menor valor e seu índice no vetor. 78 15/07/2013 40 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 9. Desenvolva um programa que leia um vetor de números reais, um escalar e imprima o resultado da multiplicação do vetor pelo escalar. 10. Faça um procedimento que faça a leitura um vetor de 10 elementos inteiros e imprima somente os valores armazenados nos índices pares. 11. Faça um programa que leia um vetor com 15 valores reais. A seguir, encontre o menor elemento do vetor e a sua posição dentro do vetor, mostrando: “O menor elemento do vetor esta na posição XXXX e tem o valor YYYYY.” 12. Faça um programa que leia um vetor de 15 posições (reais) e depois um valor a ser procurado no vetor. Imprima se o valor foi ou não encontrado e a quantidade de vezes que o valor está presente no vetor. 79 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 13. Faça uma função que receba um vetor de números inteiros e um valor inteiro. A função deverá procurar este segundo valor neste vetor e retornar seu índice se for encontrado. Se o elemento não for encontrado, retornar -1. 14. Dada uma tabela com as notas de uma turma de 20 alunos, faça funções que retornem: a) A média da turma. b) A quantidade de alunos aprovados (>=60) c) A quantidade de alunos reprovados (< 60) 15. Faça um programa que leia um conjunto de 20 valores e armazene-os num vetor V. Particione-o em dois outros vetores, P e I, conforme os valores de V forem pares ou ímpares. No final, imprima os valores dos 3 vetores. 80 15/07/2013 41 CEA 030 – Programação de Computadores I PROF. MATEUS FERREIRA SATLER 16. Faça um programa que leia um vetor G[13] que é o gabarito de um teste da loteria esportiva, contendo os valores 1 quando for coluna 1, 0 quando for coluna do meio e 2 quando for coluna 2. Ler a seguir, para 5 apostadores, seu cartão de apostas (R[13]) e depois da leitura imprimir quantos acertos o apostador teve. Faça o teste através de funções. 17. Com relação ao exercício anterior, calcule e mostre o percentual dos apostadores que fizeram de 10 a 13 pontos e o percentual dos apostadores que fizeram menos do que 10 pontos. 18. Faça um programa que leia um vetor de valores inteiros e imprima-o na ordem crescente. O vetor deve ter tamanho N (utilize a diretiva #define). 81
Compartilhar