Mudanças entre as edições de "AULA 9 - Programação 1 - Engenharia"
Linha 435: | Linha 435: | ||
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). | 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). | ||
− | |||
{{collapse top|Solução - Exercício 08}}<syntaxhighlight lang=c> | {{collapse top|Solução - Exercício 08}}<syntaxhighlight lang=c> | ||
#include<stdio.h> | #include<stdio.h> | ||
− | |||
int compara_vetores(int vet1[],int vet2[], int tamanho) | int compara_vetores(int vet1[],int vet2[], int tamanho) | ||
Linha 482: | Linha 480: | ||
} | } | ||
</syntaxhighlight>{{collapse bottom}} | </syntaxhighlight>{{collapse bottom}} | ||
− | |||
</li> | </li> | ||
</ol> | </ol> |
Edição das 16h39min de 14 de maio de 2019
AULA 9 - Vetores no C
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 para ler 10 números inteiros para um vetor e imprimir o número de números acima da média. OBS: Definir um contador, iniciado em zero. Calcular a media e fazer um loop sobre o vetor testando cada item para verificar se é maior que a média.
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;
/* ler da entrada padrão e colocar dados no vetor 1. Multiplicar valor lido por 5 e colocar no vetor 2*/
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:
main()
{
float x[10]; /* vetor com 10 floats */
int i;
x[0] = 22.5; /* colocando a constante 22.5 na posição 0 do vetor */
x[9] = x[0] + 2.5; /* operando com a posição zero e colocando resultado na posição 9 */
printf("Entrar com o número na posição 5\n");
scanf("%f",&x[5]);
i=2;
x[i*2]=x[i]*1.5; /* usando uma expressão como índice */
i=0;
while (i<8) { /* usando loop para acessar o vetor */
x[i]=0.0;
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]);
}
Note 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.
Exercícios
-
Implementar um programa em C para ler 10 números reais (float) para um vetor. Usar o comando while.
Solução - Exercício 01 //Autor: Victor Cesconetto De Pieri #include <stdio.h> main() { float x[10]; int i; i=0; while (i<10) {//while varre da posicao 0 a posicao 9 do vetor 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.
Solução - Exercício 03 //Autor: Victor Cesconetto De Pieri #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'.
-
Refazer o exercício anterior criando uma função onde o vetor é passado como parâmetro e o número de elementos maiores que a média é retornado. Considere o vetor de tamanho 10.
Solução - Exercício 05 //Autor: Victor Cesconetto De Pieri #include <stdio.h> int num_acima_media(float x[10]) { float soma = 0, media; int i, cont; /* leitura do vetor */ for (i=0;i<10;i++) { printf("Entre com x[%d] -> ", i); scanf("%f",&x[i]); soma = soma + x[i]; } /* calculo da media */ media = soma /10; /* computação de números acima da média */ cont = 0; for (i=0;i<10;i++) { if (x[i] > media) cont++; } return cont; } main() { float vet[10]; int nums; nums=num_acima_media(vet); printf("Números lidos em vet que estão acima da média = %d\n", nums); }
- Considere um vetor global de int 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 1s,...6s do vetor.
Solução - Exercício 07 //Autor: Victor Cesconetto De Pieri #include <stdio.h> #define TAM 100 int vetRnd[TAM]; void gerar_randomico() { int count[6]={0,0,0,0,0,0}, i; srand ( time(NULL) ); for (i=0;i<TAM;i++) { vetRnd[i] = rand() % 6 + 1; printf("%d ", vetRnd[i]); count[vetRnd[i]-1]++; } printf("\n"); for(i=0;i<6;i++) printf("Quantidade de %d é %d\n", i+1, count[i]); } main() { gerar_randomico(); }
-
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 vet1[],int vet2[], int tamanho) { int num_elementos; return num_elementos; } </syntaxhighlight> 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).
Solução - Exercício 08 |}#include<stdio.h> int compara_vetores(int vet1[],int vet2[], int tamanho) { int num_elementos; int i, j; for(i=0;i<tamanho;i++){ for(j=0;j<tamanho;j++){ if(vet1[i]==vet2[j]){ num_elementos++; break;//quando acha o primeiro elemento igual, passa para o próximo } } } return num_elementos; } main(){ int num_elementos,tam; int i; printf("Digite o tamanho dos dois vetores:\n"); scanf("%d",&tam); int x[tam],y[tam]; for(i=0;i<tam;i++){ printf("Entre com x[%d] -> ", i); scanf("%d",&x[i]); } for(i=0;i<tam;i++){ printf("Entre com y[%d] -> ", i); scanf("%d",&y[i]); } num_elementos = compara_vetores(x,y,tam); printf("Há %d elementos iguais\n",num_elementos); }
Solução - Exercício 02 |
---|
//Autor: Victor Cesconetto De Pieri
#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;
printf("media: %f\n",media);
}
|
Solução - Exercício 04 |
---|
#include <stdio.h>
//exercicio01
main()
{
float x[10];
int i;
for (i=0;i<10;i++) {//while varre da posicao 0 a posicao 9 do vetor
printf("Entre com x[%d] -> ", i);
scanf("%f",&x[i]);
}
}
//exercicio 02
#include <stdio.h>
main()
{
float x[10];
float soma = 0, media;
int i, cont;
/* leitura do vetor */
for(i=0;i<10;i++) {
printf("Entre com x[%d] -> ", i);
scanf("%f",&x[i]);
soma = soma + x[i];
}
/* calculo da media */
media = soma /10;
printf("media %f\n",media)
}
//exercicio 03
#include <stdio.h>
main()
{
float x[10];
float soma = 0, media;
int i, cont;
/* leitura do vetor */
for(i=0;i<10;i++) {
printf("Entre com x[%d] -> ", i);
scanf("%f",&x[i]);
soma = soma + x[i];
}
/* calculo da media */
media = soma /10;
/* computação de números acima da média */
cont = 0;
for(i=0;i<10;i++) {
if (x[i] > media)
cont++;
}
printf ("Número de números acima da média = %d\n", cont);
}
|
Solução - Exercício 06 |
---|
//Autor: Victor Cesconetto De Pieri
#include <stdio.h>
#define TAM 100
int vetRnd[TAM];
void gerar_randomico()
{
int count[6]={0,0,0,0,0,0}, i;
srand ( time(NULL) );
for (i=0;i<TAM;i++) {
vetRnd[i] = rand() % 6 + 1;
printf("%d ", vetRnd[i]);
count[vetRnd[i]-1]++;
}
}
main()
{
gerar_randomico();
}
|