AULA 9 - Programação 1 - Engenharia

De MediaWiki do Campus São José
Revisão de 07h40min de 26 de setembro de 2019 por 127.0.0.1 (discussão)
Ir para navegação Ir para pesquisar

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.


ExplicacaoVetor1.jpg

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

  1. 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++;
    	}	
    }
    
  2. Modificar o exercício para computar a média dos 10 números que estão no vetor.
  3. 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);
    }
    
  4. 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);
    }
    
  5. Refazer os exercícios anteriores usando o comando 'for'.
  6. 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);
    }
    
  7. 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);
    }
    
  8. 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.
  9. 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();
    }
    
  10. 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();
    }
    
  11. 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);
    
    
    }
    
    |}