Mudanças entre as edições de "AULA 10 - Programação 1 - Graduação"
(20 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | + | ==Objetivos== | |
− | + | ||
O aluno deverá: | O aluno deverá: | ||
Linha 21: | Linha 21: | ||
[[imagem:ExplicacaoVetor1.jpg|border|750px]] | [[imagem:ExplicacaoVetor1.jpg|border|750px]] | ||
− | '''EXERCÍCIO 1''': Implementar um algoritmo para ler 10 números inteiros para um vetor e imprimir o número de números acima da média. <br> | + | '''EXERCÍCIO 1''': Implementar um algoritmo (pseudo-código) para ler 10 números inteiros para um vetor e imprimir o número de números acima da média. <br> |
'''NOTE''': Definir um contador, iniciado em zero. Calcular a média e fazer um ''loop'' sobre o vetor testando cada item para | '''NOTE''': Definir um contador, iniciado em zero. Calcular a média e fazer um ''loop'' sobre o vetor testando cada item para | ||
verificar se é maior que a média. | verificar se é maior que a média. | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | int i=0,am=0; | ||
+ | int vet1[10]; | ||
+ | float media=0; | ||
+ | |||
+ | for(i=0;i<10;i++) { | ||
+ | printf("Entre com a nota %d => ",i+1); | ||
+ | scanf("%d",&vet1[i]); | ||
+ | media = media+vet1[i]; | ||
+ | } | ||
+ | media = media/i; | ||
+ | for( i=0;i<10;i++) { | ||
+ | if (vet1[i]>media) | ||
+ | am++; | ||
+ | } | ||
+ | printf("Media=%0.1f. O número de notas acima da média é %d.\n",media,am); | ||
+ | }</syntaxhighlight> | ||
+ | <br> | ||
+ | '''EXERCÍCIO 2''': Implementar um algoritmo (pseudo-código) para ler 10 números inteiros para um vetor e imprimir o maior e o menor número digitado. <br> | ||
+ | '''NOTE:''' É possível implementar marcando a posição do vetor que possui o maior e o menor valor ou o próprio valor máximo e mínimo. | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | int i=0,am=0; | ||
+ | int vet1[10]; | ||
+ | int max=0,min=0; | ||
+ | |||
+ | for(i=0;i<10;i++) { | ||
+ | printf("Entre com a nota %d => ",i+1); | ||
+ | scanf("%d",&vet1[i]); | ||
+ | } | ||
+ | |||
+ | for( i=0;i<10;i++) { | ||
+ | if (vet1[i]>vet1[max]) | ||
+ | max=i; | ||
+ | if (vet1[i]<vet1[min]) | ||
+ | min=i; | ||
+ | } | ||
+ | printf("Menor número: %d. Maior número: %d.\n",vet1[min],vet1[max]); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
===Definindo e usando vetores no C=== | ===Definindo e usando vetores no C=== | ||
Linha 56: | Linha 104: | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
main() | main() | ||
{ | { | ||
Linha 66: | Linha 116: | ||
i=2; | i=2; | ||
x[i*2]=i*1.5; /* usando uma expressão como índice */ | x[i*2]=i*1.5; /* usando uma expressão como índice */ | ||
− | + | ||
while (i<8) { /* usando loop para acessar o vetor */ | while (i<8) { /* usando loop para acessar o vetor */ | ||
x[i]=0.0; | x[i]=0.0; | ||
i++; | i++; | ||
} | } | ||
+ | for(i=0;i<10;i++) | ||
+ | printf("\nValor de x[%d]=%0.1f",i,x[i]); | ||
+ | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | '''NOTA''': | + | '''NOTA''': Vetores na Linguagem C começam SEMPRE na posição 0. |
===Iniciando vetores em C=== | ===Iniciando vetores em C=== | ||
Linha 120: | Linha 173: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Perceba como é realizada a declaração de parâmetros que são vetores. Observe no exemplo, que o vetor aux é na realidade o próprio vetor vet. Inicialmente dados são lidos para aux e depois vet é impresso. | |
− | Não é obrigatório definir o tamanho do vetor na declaração de parâmetros. Na realidade o C não verifica o acesso indevido a um elemento fora do tamanho do vetor. | + | Não é obrigatório definir o tamanho do vetor na declaração de parâmetros. '''Atenção!''' Na realidade o C não verifica o acesso indevido a um elemento fora do tamanho do vetor. |
==Exercícios == | ==Exercícios == | ||
Linha 195: | Linha 248: | ||
! style="background: #cdc5bf;" | [[Lista Exercícios 1 - Programação 1 - Graduação | << ]] | ! style="background: #cdc5bf;" | [[Lista Exercícios 1 - Programação 1 - Graduação | << ]] | ||
! style="background: #cdc5bf;" | Aula 10 | ! style="background: #cdc5bf;" | Aula 10 | ||
− | ! style="background: #cdc5bf;" | [[AULA 11 - Programação 1 - Graduação]] | + | ! style="background: #cdc5bf;" | [[AULA 11 - Programação 1 - Graduação | >>]] |
|} | |} |
Edição atual tal como às 13h40min de 31 de março de 2015
Objetivos
O aluno deverá:
- Compreender o conceito de vetores.
- Definir e inicializar vetores do tipo int, float e double no C.
- Passar vetores como parâmetro sem usar o conceito de ponteiros.
Arrays Unidimensionais (Vetores)
Um vetor pode ser visto como uma variável que pode ser indexada e onde em cada posição existe um elemento do vetor. Os elementos do vetor possuem um tipo único. Uma boa analogia é comparar o vetor com uma tabela de tamanho fixo onde em cada linha pode ser armazenado um elemento.
PROBLEMA: Ler 10 números inteiros para um vetor de inteiros. Computar um segundo vetor que é o resultado da multiplicação por um escalar inteiro 5.
DADO DE ENTRADA: Os 10 números armazenados em VET1
DADO DE SAÍDA: VET2, o vetor resultado da multiplicação de VET1 por 5.
EXERCÍCIO 1: Implementar um algoritmo (pseudo-código) para ler 10 números inteiros para um vetor e imprimir o número de números acima da média.
NOTE: Definir um contador, iniciado em zero. Calcular a média e fazer um loop sobre o vetor testando cada item para
verificar se é maior que a média.
#include <stdio.h>
main()
{
int i=0,am=0;
int vet1[10];
float media=0;
for(i=0;i<10;i++) {
printf("Entre com a nota %d => ",i+1);
scanf("%d",&vet1[i]);
media = media+vet1[i];
}
media = media/i;
for( i=0;i<10;i++) {
if (vet1[i]>media)
am++;
}
printf("Media=%0.1f. O número de notas acima da média é %d.\n",media,am);
}
EXERCÍCIO 2: Implementar um algoritmo (pseudo-código) para ler 10 números inteiros para um vetor e imprimir o maior e o menor número digitado.
NOTE: É possível implementar marcando a posição do vetor que possui o maior e o menor valor ou o próprio valor máximo e mínimo.
#include <stdio.h>
main()
{
int i=0,am=0;
int vet1[10];
int max=0,min=0;
for(i=0;i<10;i++) {
printf("Entre com a nota %d => ",i+1);
scanf("%d",&vet1[i]);
}
for( i=0;i<10;i++) {
if (vet1[i]>vet1[max])
max=i;
if (vet1[i]<vet1[min])
min=i;
}
printf("Menor número: %d. Maior número: %d.\n",vet1[min],vet1[max]);
}
Definindo e usando vetores no C
Um vetor pode ser facilmente definido no C da forma:
TipoVetor NomeDoVetor[dimensao];
O algoritmo do fluxograma implementado anteriormente ficaria da seguinte forma em C:
#include <stdio.h>
main()
{
int vet1[5],vet2[5];
int i;
for(i=0;i<5;i++) {
printf("Entre com vet[%d] => ",i);
scanf("%d",&vet1[i]);
vet2[i]=vet1[i]*5;
}
/* para conferir- vamos imprimir o conteúdo de vet2 */
for(i=0;i<5;i++)
printf("vet2[%d] => %d\n",i,vet2[i]);
}
Vamos a um exemplo que mostra as possibilidades de acesso a um vetor:
#include <stdio.h>
main()
{
float x[10]; /* vetor com 10 floats */
int i;
x[0] = 22.5; /* colocando 22.5 na posição 0 do vetor */
x[9] = x[0] + 2.5;
printf("Entrar com o número na posição 5\n");
scanf("%f",&x[5]);
i=2;
x[i*2]=i*1.5; /* usando uma expressão como índice */
while (i<8) { /* usando loop para acessar o vetor */
x[i]=0.0;
i++;
}
for(i=0;i<10;i++)
printf("\nValor de x[%d]=%0.1f",i,x[i]);
}
NOTA: Vetores na Linguagem C começam SEMPRE na posição 0.
Iniciando vetores em C
Pode-se iniciar um vetor da forma:
#include <stdio.h>
void main()
{
int x[10] = {2,4,7,-5,3,2,3,4,9,10};
printf("%d\n", x[2]);
}
Passando vetores como parâmetros
Vetores não são copiados na passagem por parâmetro. Eles são passados sempre como referência. Veja o exemplo a seguir:
#include <stdio.h>
void ler_vet(int aux[5])
{
int i;
for (i=0;i<5;i++) {
printf("aux[%d] <== ",i);
scanf("%d",&aux[i]);
}
}
main()
{
int vet[5], i;
ler_vet(vet);
for (i=0;i<5;i++)
printf("vet[%d]=%d\n",i,vet[i]);
}
Perceba como é realizada a declaração de parâmetros que são vetores. Observe no exemplo, que o vetor aux é na realidade o próprio vetor vet. Inicialmente dados são lidos para aux e depois vet é impresso.
Não é obrigatório definir o tamanho do vetor na declaração de parâmetros. Atenção! Na realidade o C não verifica o acesso indevido a um elemento fora do tamanho do vetor.
Exercícios
- Implementar um programa em C para ler 10 números reais (float) para um vetor. Usar o comando while.
#include <stdio.h> main() { float x[10]; int i; i=0; while (i<10) { printf("Entre com x[%d] -> ", i); scanf("%f",&x[i]); i++; } }
- Modificar o exercício para computar a média dos 10 números que estão no vetor.
- Modificar o exercício anterior para computar a quantidade de números do vetor que estão acima da média.
#include <stdio.h> main() { float x[10]; float soma = 0, media; int i, cont; /* leitura do vetor */ i=0; while (i<10) { printf("Entre com x[%d] -> ", i); scanf("%f",&x[i]); soma = soma + x[i]; i++; } /* calculo da media */ media = soma /10; /* computação de números acima da média */ cont = 0; i=0; while (i<10) { if (x[i] > media) cont++; i++; } printf ("Número de números acima da média = %d\n", cont); }
- Refazer os exercícios anteriores usando o comando for;
- Considere um vetor global de floats chamado vetRnd de tamanho 100. Construa uma função que inicia este vetor com 100 números randômicos entre 1 e 6.
- Sobre o exercício anterior, acrescente uma função para imprimir o número de 0s,1s,...6s do vetor.
- Implementar uma função que recebe dois vetores de inteiros como parâmetro e o tamanho dos mesmos (suponha vetores de mesmo tamanho). A função deve retornar o número de elementos iguais comparados posição por posição. O esqueleto da função deve ser como:
int compara_vetores(int ve1[],int vet2[], int tamanho) { int num_elementos; return num_elementos; }
Exemplo: Para os vetores x[]={1,1,3,4,5} e y[]={1,2,3,3,5} temos três elementos iguais (nas posições 0, 2 e 4).
<< | Aula 10 | >> |
---|