7888-Aula_06_-_Vetores_como_parâmetros
-
Upload
thomas-santos -
Category
Documents
-
view
11 -
download
0
Transcript of 7888-Aula_06_-_Vetores_como_parâmetros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 1/48
1
Estrutura de Dados
Aula 06Vetores como parâmetros;
Diferença entre vetores e ponteiros;Atividade de laboratório.
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 2/48
2
• Implemente uma função que classifique os
elementos de um vetor em ordem crescente usandoo algoritmo de ordenação por seleção.
• ordenação por seleção: procure pelo menorelemento no vetor e permute com o primeiroelemento do vetor; repita este processo para osubvetor que se inicia no segundo elemento e,assim, sucessivamente; o processo termina quandoo subvetor contiver apenas um elemento.
• Teste a função com dados aleatórios.
Problema 25
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 3/48
3
Análise do programa
Observe como um vetoré passado comoparâmetro de umafunção: o número deelementos do vetor não
precisa ser declarado.
Para haver a troca, os
parâmetros não devemser passados porreferência (endereço)?
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 4/48
Análise do programa#define INFINITO 999999
#define TAM_MAX 50
int main(int args, char * arg[]){
int i,n,a[TAM_MAX];
// Inicializar gerador de números aleatórios
srand((unsigned)time(NULL));
// Vetor gerado aleatoriamente
n = (rand() % TAM_MAX)+1;printf("Vetor original: ");
for (i = 0; i < n; i++)
{
a[i] = (rand() % 100);
printf("%d ",a[i]);
}
printf("\n");
// Classificar vetor
ordenar_por_selecao(a,n);
printf("Vetor ordenado: ");
for (i = 0; i < n; i++)
printf("%d ",a[i]);
printf("\n");
system("PAUSE");
return 0;} 4
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 5/48
5
• Quando deve ser feita este tipo de passagem? Veja
o exemplo:
Exibe: x = 2 y = 5
Passagem por Valor
Exibe: x = 5 y = 2
Passagem por Referência
Passagem de parâmetros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 6/48
6
• No caso de uma função ter como parâmetro um
vetor, temos um caso particular de grandeimportância.
Por quê? Porque o nome de um vetor nada mais éque um ponteiro para sua primeira posição.
• Exemplo:
C O R D I A Lv0
1 2 3 4 5 6
F17
F17 F18 F19 F1A F1B F1C F1D
char v[8];
\0
7
F1E
Vetores como parâmetros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 7/487
• Mas, então como é possível usarmos a notação:
• Isto pode ser facilmente explicado, desde que se
entenda que a notação acima é absolutamenteequivalente a:
• Mas, o que significa somar (ou subtrair) um valor aum ponteiro?
nome_do_vetor[índice]
*(nome_do_vetor + índice)
Vetores como parâmetros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 8/488
• Quando incrementamos um ponteiro, ele passa a
apontar para o próximo valor do mesmo tipo.
• Exemplo: ao incrementar um ponteiro para char,
ele anda 1 byte na memória e ao incrementar umponteiro para double ele anda 8 bytes.
C O R D I A L
v
0 1 2 3 4 5 6
v + 3
v &v[0]
*v v[0] = 'C'
*(v + 3) v[3] = 'D'
São equivalentes!!!
Vetores como parâmetros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 9/489
• Logo, como o nome de um vetor é também um
ponteiro, a passagem de parâmetro para vetores ésempre por referência.
Assim, qualquer modificação ocorrida no vetordentro da função será, na realidade, feita sobre oparâmetro usado na chamada.
...
...
Alterações no vetor x dentroda função ordenar_por_selecaoserão também realizadas novetor a.
Na definição da função, podemos
substituir int x[ ] por int x[TAM_MAX] ou ainda int *x.
Vetores como parâmetros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 10/48
10
• O que devemos fazer se desejarmos que os
elementos de um vetor, passado como parâmetropara uma função, não sejam alterados?
• Resposta: dentro da função é preciso atribuir oselementos do vetor a uma variável local.
• Considere o exemplo mostrado a seguir.
Vetores como parâmetros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 11/48
11
Os elementos do vetor a terãoseus valores modificados pelafunção quadrado?
Sim! A passagem
é por referência.
Vetores como parâmetros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 12/48
12
Não! Foi feita uma
cópia de v em x.
Atenção! Observe que a cópia doselementos foi feita um a um. O queaconteceria se fizéssemos: x = v?
Vetores como parâmetros
E agora, os elementos do vetor a terão seus valores modificadospela função quadrado?
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 13/48
13
Atenção!!
• Há uma diferença importante entre o nome de umvetor e um ponteiro: um ponteiro é uma variável,mas o nome de um vetor não é uma variável.
• Isto significa, que não se consegue alterar o
endereço que é apontado pelo "nome do vetor".Exemplo:
int v[10];
int *p, i;p = &i;
v = v + 2;
v++;
v = p;
Operações
inválidas
p = v;
p = v + 2;
Operaçõesválidas
Diferença entre vetores e ponteiros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 14/48
14
• Para indicar que um parâmetro de função não
deve ser alterado, usa-se o qualificador const.
• Exemplo:
Se existir na função umaatribuição de valor a umparâmetro declaradocomo constante, a
compilação indicaráum erro.
Qualificador const
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 15/48
15
• Implemente uma função que classifique os
elementos de um vetor em ordem crescenteusando o algoritmo quicksort:
1. Seja m o elemento na posição central no vetor;
2. Seja i o índice do primeiro e j, o índice do último elemento do vetor;3. Enquanto i for menor ou igual a j, faça com que:
a) O valor de i cresça até encontrar um elemento maior que m;b) O valor de j diminua até encontrar um elemento menor que m;
c) Haja a troca entre os elementos que ocupam as posições i e j.
Problema 26
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 16/48
16
• Ao final desses passos, a situação do vetor será a
seguinte:à esquerda da posição central, existem somenteelementos menores do que m;à direita da posição central, existem somente
elementos maiores do que m;
• Assim, o problema de ordenar o vetor se reduz aoproblema de ordenar cada uma dessas “metades”.
• Os mesmos passos serão aplicadas repetidasvezes à cada nova “metade”, até que cada metadecontenha um único elemento (caso trivial).
Problema 26
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 17/48
17
• Considere o exemplo abaixo:
• Como a natureza dos problemas é sempre amesma (“ordenar um vetor”), o mesmo método
pode ser usado para cada subproblema.
4 1 3 5 2
Ordenar {4,1,3,5,2}
2 1 5 4
Ordenar {2,1} Ordenar {5,4}
1 2Ordenar {1} Ordenar {2}
4 5Ordenar {4} Ordenar {5}
Problema 26
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 18/48
18
Análise do programa
Veja que interessante: afunção quicksort chamaa si mesma!!!
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 19/48
19
• A função quicksort implementada é um exemplo
de função recursiva: função que chama a simesma.
Recursividade
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 20/48
20
• A recursividade muitas vezes torna o algoritmo
mais simples.
• Veja, por exemplo, o Problema 27, que
implementa uma solução recursiva para o jogoTorre de Hanói.
• Desafio: escrever um algoritmo não-recursivo
para resolver o jogo Torre de Hanói.
Funções recursivas
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 21/48
21
// Programa p27.c
#include <stdio.h>
#include <stdlib.h>
void mover(int n, int a, int b, int c);
int main(int args, char * arg[])
{
int n;
printf("Numero de discos: ");
scanf("%d",&n);printf("Solucao da Torre de Hanoi com %d discos:\n",n);
mover(n,0,2,1);
system("pause");
return 0;
}
void mover(int n, int a, int b, int c){
if (n > 0)
{
mover(n-1,a,c,b);
printf("%d -> %d\n",a,b);
mover(n-1,c,b,a);
}
}
Funções recursivas
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 22/48
22
• Considere que um polinômio é representado como um
vetor de valores do tipo float (vetor de coeficientes).Por economia de memória, o vetor deve conterapenas o número necessário e suficiente deelementos para representar o polinômio.
• Implemente a função mostrar_polinomio que exibe umpolinômio representado desta maneira.
Problema 28
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 23/48
23
Análise do programa
Note que o vetor é declaradocomo um ponteiro.
Note que o tamanho do vetorde coeficientes é definido emtempo de execução, após ousuário fornecer o grau dopolinômio.
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 24/48
24
• Já discutimos que o nome de um vetor nada mais é
que um ponteiro para sua primeira posição.
• Exemplo:
• Portanto, uma outra forma de declarar o vetor é:
char *v;
Alocação estática de memória
C O R D I A Lv0 1 2 3 4 5 6
F17
F17 F18 F19 F1A F1B F1C F1Dchar v[8];
\07
F1E
á ó
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 25/48
25
• Então, qual a diferença entre declarar o vetor v
como um ponteiro para char ou como um vetor deelementos do tipo char?
• A diferença está na alocação de memória.
char *v;
ou
Alocação estática de memória
C O R D I A Lv 0 1 2 3 4 5 6F17
F17 F18 F19 F1A F1B F1C F1D
char v[8];
\07
F1E
Al á i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 26/48
26
• Ao declarar v como um vetor de elementos do tipo
char, o compilador aloca automaticamente o espaçode memória necessário.
• Para o exemplo:
• O compilador aloca 8 * N bytes de memória para v,onde N corresponde ao número de bytes usado pelo
compilador para armazenar o tipo char.
• Normalmente, N = 1 byte, para o tipo char.
char v[8];
Alocação estática de memória
Al ã á i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 27/48
27
• A linguagem C utiliza a função sizeof para determinar
o número de bytes reservado pelo compilador paraum determinador tipo.
• Por exemplo, no gcc:
• Ao calcular o espaço de memória de um vetor, use afunção sizeof, pois o espaço de memória de umdeterminado tipo, pode variar entre compiladores.
a = sizeof(int);
b = sizeof(float);
c = sizeof(double);
a = 4
b = 4
c = 8
int w[10];
10 * 4 bytes
10 * sizeof(int)
gcc
qualquer
compilador
Alocação estática de memória
Al ã á i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 28/48
28
• Se o programador define a quantidade de memória
necessária a um vetor (especificando o tipo e onúmero de elementos), a alocação de memória podeser feita em tempo de compilação: alocação estática.
• Declarando um vetor como ponteiro, a alocação dememória não pode ser feita pelo compilador, pois adeclaração não especifica o número de elementos.
• Neste caso, a alocação deverá ser feita em tempo deexecução: alocação dinâmica de memória.
Alocação estática de memória
porque é feita em tempo de execução
Al ã di â i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 29/48
29
• Para fazer a alocação dinâmica de memória,
podemos usar as funções calloc ou malloc.
• A função calloc requer dois parâmetros: o número deposições de memória e o tamanho em bytes de cadaposição.
• Já a função malloc requer apenas um parâmetro: o
espaço total em bytes de memória necessário.
• Estas funções retornam um ponteiro do tipo void parao início do espaço de memória alocado.
Alocação dinâmica de memória
Al ã di â i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 30/48
30
• Portanto, este ponteiro deve ser convertido (type
casting) para o tipo de dado desejado.
• Para fazer com que w aponte para um espaço dememória capaz de acomodar 10 elementos do tipo
int, podemos escrever:
ou então:
int *w;
w = (int *)calloc(10,sizeof(int));
int *w;
w = (int *)malloc(10*sizeof(int));
No caso do gcc, esta conversãonão precisa ser explícita.
Alocação dinâmica de memória
Al ã di â i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 31/48
31
• Qual a vantagem de declarar um vetor como
ponteiro?
• Neste caso, não é necessário definir, a priori , onúmero de posições de memória necessárias.
• No programa p28.c, por exemplo, o vetor c é usadopara armazenar os coeficientes de um polinômio.
• Porém, não é possível saber o número exato decoeficientes, pois este número depende do grau dopolinômio, que é fornecido em tempo de execução.
Alocação dinâmica de memória
Al ã di â i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 32/48
32
• Obviamente, seria possível declarar o vetor c como:
sendo MAX_TAM uma constante definidapreviamente.
• Neste caso, MAX_TAM deveria ser estimado epoderíamos ter duas situações possíveis:a) Desperdício de memória;b) Erro devido à subestimação de MAX_TAM.
• O programa p28.c declara o vetor c como umponteiro e aloca o espaço de memória somentedepois de conhecido o grau do polinômio.
int c[MAX_TAM];
c = (float *)calloc(n+1,sizeof(float));
Alocação dinâmica de memória
Al ã di â i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 33/48
33
• Outra vantagem da alocação dinâmica de memória é
a possibilidade de reduzir ou aumentar a quantidadede memória alocada anteriormente.
• Isto pode ser feito com a função realloc, cujosparâmetros são um ponteiro para o início do bloco de
memória e a quantidade de bytes a ser alocada.
• Essa função retorna um ponteiro para o início donovo bloco de memória. Este ponteiro pode ser igual
ao ponteiro para o bloco de memória original.• Caso seja diferente, a função realloc copia os dados
armazenados no bloco de memória original para o
novo bloco de memória.
Alocação dinâmica de memória
Al ã di â i d ó i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 34/48
34
Criação do vetor.
Aumentando oespaço alocado.
Diminuindo oespaço alocado.
Alocação dinâmica de memória
St i t i
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 35/48
35
• Considere o seguinte programa:
• Neste caso, msg é um ponteiro para char, ouequivalentemente, um vetor de caracteres.
• Note que não há alocação de memória chamando-se a função calloc ou a função malloc.
Strings como ponteiros
Strings como ponteiros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 36/48
36
• Isto é possível porque, para strings, o espaço de
memória necessário e suficiente é alocado,dinamicamente, no momento da atribuição.
• Assim, a instrução:
atribui à msg treze posições de memória:
• Se em seguida, o programa atribui:
msg = "Linguagem C\n";
L i n g u a g e m C \n \0
msg = "Programação na Linguagem C\n";
msg = "C\n";
ou O espaço alocado para msg serádiminuído ou aumentado
automaticamente.
msg
Strings como ponteiros
Strings como ponteiros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 37/48
37
• Este tipo de alocação dinâmica ocorre apenas no
caso de atribuições para strings.
• Se o valor do string não for atribuído diretamente(por exemplo, valor é lido pelo comando gets), a
alocação deve ser feita usando calloc ou malloc.
Strings como ponteiros
Strings como ponteiros
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 38/48
38
• A leitura de um string deve ser feita pela função
gets, pois usando-se scanf, os espaços em brancosão entendidos como separadores de valores.
• Por exemplo, se o usuário digita:
Então, a instrução:
atribuiria à variável nome apenas o valor “Sao”.
Sao Paulo Futebol Clube
scanf("%s",nome);
Strings como ponteiros
E t d d D d
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 39/48
Entrada de DadosString com espaços em branco
E t d d D d
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 40/48
Entrada de DadosString com espaços em branco
E t d d D d
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 41/48
scanf(%[^\n]s, nome);%s
Leitura de string ^
Ler qualquer caractere
\nAté um enter
Entrada de DadosString com espaços em branco
Alocação dinâmica para matrizes
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 42/48
42
• Como no caso de vetores, o nome de uma matriz é
também um ponteiro para a primeira posição dememória alocada para esta matriz.
• Portanto, uma matriz também pode ser declarada
como um ponteiro.
• Considere, por exemplo, o caso de uma matrizbidimensional com m linhas e n colunas.
Alocação dinâmica para matrizes
Alocação dinâmica para matrizes
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 43/48
43
• Uma matriz pode ser imaginada como um vetor de
m elementos, em que cada elemento é um ponteiropara o início de um vetor de n elementos.
• Exemplo: int mat[3][4];
Alocação dinâmica para matrizes
mat
F17
F17
F18
F19
F1A F1B F1C F1D
Vetor que armazena os
endereços das linhas da matriz.
F1A
A01
B01
A01 A02 A03 A04
B01 B02 B03 B04
Vetores quearmazenam oselementos da
matriz.
Alocação dinâmica para matrizes
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 44/48
44
• Portanto, inicialmente, é preciso alocar um vetor
com três elementos, correspondentes aosendereços das linhas da matriz.
• Isto pode ser feito como a seguir:
• A seguir, deve-se alocar, para cada elemento de
mat, um vetor com quatro elementos do tipo int.
mat = (int **)calloc(3,sizeof(int *));
for (i = 0; i < 3; i++)
mat[i] = (int *)calloc(4,sizeof(int));
Alocação dinâmica para matrizes
Alocação dinâmica para matrizes
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 45/48
45
• Portanto, no caso geral de uma matriz de m linhas
e n colunas, a alocação dinâmica de memória podeser feita como:
• A alocação de memória para matrizes com maisdimensões pode ser feita de forma análoga.
• Como seria, por exemplo, para uma matriztridimensional?
mat = (int **)calloc(m,sizeof(int *));
for (i = 0; i < m; i++)
mat[i] = (int *)calloc(n,sizeof(int));
Alocação dinâmica para matrizes
Alocação dinâmica para matrizes
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 46/48
46
• Neste caso, teríamos o código:
• Para este código, podemos abstrair arepresentação da matriz a como a seguir.
Alocação dinâmica para matrizes
Alocação dinâmica para matrizes
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 47/48
47
15 2 19 51
23 18 3 1
1 3 76 12
a10
10
A0 A1 A2 A3
B0 B1 B2 B3
C0 C1 C2 C320
30
A0
B0
C0
D0
E0
F0
11
20
22
21
30
32
31 7 21 56 8
4 43 1 9
9 6 23 90
D0 D1 D2 D3
E0 E1 E2 E3
F0 F1 F2 F3
Exemplo: float ***a;
Sejam: n1=2, n2=3, n3=4
Exemplo:a[0][0][0] = 23a[1][2][3] = 90
Alocação dinâmica para matrizes
EXERCÍCIO Problema 29
5/13/2018 7888-Aula_06_-_Vetores_como_parâmetros - slidepdf.com
http://slidepdf.com/reader/full/7888-aula06-vetorescomoparametros 48/48
• Um professor mantém as notas dos alunos das classes
em que leciona em tabelas, onde as linhascorrespondem aos alunos e as colunas correspondemàs avaliações.
• Para cada classe, o professor pode fazer quantasavaliações desejar. Implemente as funções: – maior_nota: retorna a maior nota obtida pela classe;
deve retornar também o número do aluno e o número daavaliação correspondente à maior nota da classe;
– media_classe: retorna a média das notas obtidas pelaclasse, considerando todas as avaliações realizadas.
• Testar o programa com notas geradas aleatoriamente.
EXERCÍCIO Problema 29