Mudanças entre as edições de "AULA 9 - Programação 1 - Engenharia"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(71 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 8: Linha 8:
 
*definir e inicializar vetores do tipo int, float e double no C;
 
*definir e inicializar vetores do tipo int, float e double no C;
 
*passar vetores como parâmetro sem usar o conceito de ponteiros;
 
*passar vetores como parâmetro sem usar o conceito de ponteiros;
 +
*implementar algoritmos simples usando vetores.
 +
</center>
 
</blockquote>
 
</blockquote>
  
 
<blockquote style="background: #DCF4CC; border: 1px solid black; padding: 1em;">
 
<blockquote style="background: #DCF4CC; border: 1px solid black; padding: 1em;">
=ARRAYS UNIDIMENSIONAIS (VETORES)=
+
 
 +
=ARRAYS unidimensionais (vetores)=
 
</blockquote>
 
</blockquote>
  
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.
+
Um vetor pode ser visto como uma variável (uma caixa) dividida em partes menores (CAIXAS menores) acessadas por um índice (posição). Podemos dizer que cada elemento do vetor pode ser acessado através da indexação do vetor. Os elementos do vetor possuem um tipo único.  
  
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.
+
[[imagem:PRG1-vetor_armario.png|border|450px]]
  
DADO DE ENTRADA: Os 10 números armazenados em VET1
+
Uma boa analogia é comparar o vetor com uma tabela de tamanho fixo onde em cada linha pode ser armazenado um elemento.
  
DADO DE SAÍDA: VET2, o vetor resultado da multiplicação de VET1 por 5.
+
[[imagem:PRG1-tabela_vetor.png|border|250px]]
  
 +
PROBLEMA: Ler 5 números inteiros para um vetor de inteiros (VET1). Computar um segundo vetor (VET2) que é o resultado da multiplicação do primeiro vetor por um escalar inteiro 5.
  
 +
DADO DE ENTRADA: Os 5 números a serem armazenados em VET1 (nome do vetor onde serão armazenados os dados)
  
[[imagem:ExplicacaoVetor1.jpg|border|750px]]
+
DADO DE SAÍDA: VET2, o vetor onde serão armazenados os resultados da multiplicação de cada elemento 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
+
[[imagem:ExplicacaoVetor1-Va.png|border|850px]]
verificar se é maior que a média.
 
  
===Definindo e usando vetores no C===
 
  
 +
 +
<blockquote style="background: #DCF4CC; border: 1px solid black; padding: 1em;">
 +
 +
=Definindo e usando vetores no C=
 +
</blockquote>
  
 
Um vetor pode ser facilmente definido no C da forma:
 
Um vetor pode ser facilmente definido no C da forma:
  
  TipoVetor NomeDoVetor[dimensao];
+
  tipo_vetor nome_do_vetor[dimensao];
  
O algoritmo do fluxograma implementado anteriormente ficaria da seguinte forma em C:
+
O algoritmo do fluxograma da multiplicação de um vetor por 5 implementado anteriormente ficaria da seguinte forma em C:
  
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
  
main()
+
int main()
 
{
 
{
 
   int vet1[5],vet2[5];
 
   int vet1[5],vet2[5];
Linha 55: Linha 63:
 
   for(i=0;i<5;i++)
 
   for(i=0;i<5;i++)
 
     printf("vet2[%d] => %d\n",i,vet2[i]);
 
     printf("vet2[%d] => %d\n",i,vet2[i]);
 +
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Linha 81: Linha 90:
 
     i++;
 
     i++;
 
   }
 
   }
 +
  return 0;
 
}   
 
}   
 
</syntaxhighlight>
 
</syntaxhighlight>
  
  NOTA: vetores na Linguagem C começam SEMPRE na posição 0
+
<blockquote style="background: pink; border: 1px solid black; padding: 1em;">
 +
  NOTA: Um vetor de tamanho N, na Linguagem C, começa SEMPRE na posição 0 indo até a posição N-1
 +
</blockquote>
 +
 
 +
==Exercício de Fixação==
  
===Iniciando vetores em C===
+
Implementar um programa C para ler 10 números inteiros para um vetor e imprimir a quantidade (o número) de números acima da média.
 +
 
 +
OBS: Definir um contador, iniciado em zero. Ler os 10 números para um vetor e calcular a media.  Fazer um segundo loop sobre o vetor testando cada item para verificar se é maior que a média. Incrementar o contador a cada item acima da média.
 +
 
 +
Este problema exige que os dados sejam armazenados previamente, de forma que a média calculada possa posteriormente ser usada para a computação
 +
da quantidade de números que estão acima da média.
 +
 
 +
*DADOS DE ENTRADA: 10 números a serem fornecidos.
 +
*DADOS DE SAÍDA: Quantidade de números acima da média.
 +
 
 +
<blockquote style="background: #DCF4CC; border: 1px solid black; padding: 1em;">
 +
 
 +
=Iniciando vetores em C=
 +
</blockquote>
  
 
Pode-se iniciar um vetor da forma:
 
Pode-se iniciar um vetor da forma:
Linha 101: Linha 128:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Passando vetores como parâmetros===
+
<blockquote style="background: #DCF4CC; border: 1px solid black; padding: 1em;">
 +
=Passando vetores como parâmetros=
 +
</blockquote>
 +
 
  
 
Vetores não são copiados na passagem por parâmetro. Eles são passados sempre como referência. Veja o exemplo a seguir:
 
Vetores não são copiados na passagem por parâmetro. Eles são passados sempre como referência. Veja o exemplo a seguir:
Linha 118: Linha 148:
 
}
 
}
  
main()
+
int main()
 
{
 
{
 
   int vet[5], i;
 
   int vet[5], i;
Linha 125: Linha 155:
 
   for (i=0;i<5;i++)
 
   for (i=0;i<5;i++)
 
       printf("vet[%d]=%d\n",i,vet[i]);
 
       printf("vet[%d]=%d\n",i,vet[i]);
 +
 +
  return 0;
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
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.
+
<blockquote style="background: pink; border: 1px solid black; padding: 1em;">
 +
Note como é realizada a declaração de parâmetros que são vetores. Observe no exemplo, que o vetor ''aux'', durante a execução da função ler_vet é 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. Na realidade o C não verifica o acesso indevido a um elemento fora do tamanho do vetor.
 +
</blockquote>
  
===Exercícios ===
+
=Exercícios=
  
 
<ol>
 
<ol>
 +
<li>
 +
Implementar uma função para realizar o produto escalar de 2 vetores de dimensão n. A função deve retornar o produto.
 +
</li>
 +
<li>
 +
Implementar uma função que troca os valores de dois vetores de dimensão 5. Siga o esqueleto abaixo. Implemente também uma função que imprime um vetor de dimensão 5. Use esta função para testar.
 +
 +
<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
 +
void troca_vetor(int a[5], int b[5])
 +
{
 +
 +
    return;
 +
}
 +
 +
void imprime_vetor(int a[5])
 +
{
 +
    int i;
 +
    for (i = 0; i < 5; i++) {
 +
        printf("vet[%d] => %d\n", i, a[i]);
 +
    }
 +
    printf("\n");
 +
    return;
 +
}
 +
 +
int main()
 +
{
 +
    int x[5] = {3, 9, 7, 0, 2},
 +
        y[5] = {10,11,0,3,7};
 +
 +
    troca_vetor (x , y);
 +
    imprime_vetor (x);
 +
 +
    return 0;
 +
}
 +
</syntaxhighlight>
 +
</li>
 +
 +
<li>
 +
Modificar a função anterior para que ela possa funcionar para quaisquer dimensão dos vetores. Siga o exemplo da função imprime_vetor() abaixo.
 +
<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
 +
void troca_vetor(int a[], int b[], int tamanho)
 +
{
 +
 +
    return;
 +
}
 +
 +
void imprime_vetor(int a[], int tamanho)
 +
{
 +
    int i;
 +
    for (i = 0; i < tamanho; i++) {
 +
        printf("vet[%d] => %d\n", i, a[i]);
 +
    }
 +
    printf("\n");
 +
    return;
 +
}
 +
 +
int main()
 +
{
 +
    int x[5] = {3, 9, 7, 0, 2},
 +
        y[5] = {10,11,0,3,7};
 +
 +
    troca_vetor (x , y, 5);
 +
    imprime_vetor (x, 5);
 +
 +
    return 0;
 +
}
 +
</syntaxhighlight>
 +
 +
</li>
 
<li>
 
<li>
 
Implementar um programa em C para ler 10 números reais (float) para um vetor. Usar o comando ''while''.
 
Implementar um programa em C para ler 10 números reais (float) para um vetor. Usar o comando ''while''.
  
{{collapse top|Solução - Exercício 01}}<syntaxhighlight lang=c>
+
{{collapse top|Solução - Exercício 01}}
 +
<syntaxhighlight lang=c>
 
//Autor: Victor Cesconetto De Pieri
 
//Autor: Victor Cesconetto De Pieri
  
 
#include <stdio.h>
 
#include <stdio.h>
  
main()
+
int main()
 
{
 
{
 
float x[10];
 
float x[10];
Linha 153: Linha 260:
 
scanf("%f",&x[i]);
 
scanf("%f",&x[i]);
 
  i++;
 
  i++;
}
+
}
 +
return 0;
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Linha 163: Linha 271:
 
</li>
 
</li>
  
{{collapse top|Solução - Exercício 02}}<syntaxhighlight lang=c>
+
{{collapse top|Solução - Exercício 02}}
 +
<syntaxhighlight lang=c>
 
//Autor: Victor Cesconetto De Pieri
 
//Autor: Victor Cesconetto De Pieri
  
Linha 169: Linha 278:
 
   
 
   
 
   
 
   
main()
+
int main()
 
{
 
{
 
float x[10];
 
float x[10];
Linha 194: Linha 303:
 
Modificar o exercício anterior para computar a quantidade de números do vetor que estão acima da média.
 
Modificar o exercício anterior para computar a quantidade de números do vetor que estão acima da média.
  
{{collapse top|Solução - Exercício 03}}<syntaxhighlight lang=c>
+
{{collapse top|Solução - Exercício 03}}
 +
<syntaxhighlight lang=c>
 
//Autor: Victor Cesconetto De Pieri
 
//Autor: Victor Cesconetto De Pieri
  
Linha 236: Linha 346:
 
</li>
 
</li>
  
{{collapse top|Solução - Exercício 04}}<syntaxhighlight lang=c>
+
{{collapse top|Solução - Exercício 04}}
 +
<syntaxhighlight lang=c>
  
 
#include <stdio.h>
 
#include <stdio.h>
Linha 310: Linha 421:
  
 
<li>
 
<li>
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.
+
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 N, a ser fornecido como parâmetro.
  
{{collapse top|Solução - Exercício 05}}<syntaxhighlight lang=c>
+
{{collapse top|Solução - Exercício 05}}
//Autor: Victor Cesconetto De Pieri
 
  
 +
<syntaxhighlight lang=c>
 
#include <stdio.h>
 
#include <stdio.h>
  
int num_acima_media(float x[10])
+
int computar_num_acima_media(float x[], int n)
 
{
 
{
+
    int i, cont;
float soma = 0, media;  
+
    float soma, media;
int i, cont;
+
 
+
    /* leitura do vetor */
/* leitura do vetor */
+
    i=0;
for (i=0;i<10;i++) {
+
    while (i<n) {
printf("Entre com x[%d] -> ", i);
+
        soma = soma + x[i];
scanf("%f",&x[i]);
+
        i++;
soma = soma + x[i];
+
    }
 +
 
 +
    /* calculo da media */
 +
    media = soma /n;
  
}
+
    /* computação de números acima da média */
+
    cont = 0;
/* calculo da media */
+
    i=0;
media = soma /10;
+
    while (i<n) {
+
        if (x[i] > media)
/* computação de números acima da média */
+
            cont++;
cont = 0;
+
        i++;
for (i=0;i<10;i++) {
+
    }
if (x[i] > media)  
+
    return cont;
          cont++;
 
}
 
return cont;
 
 
}
 
}
  
main()
+
int main()
{  
+
{
float vet[10];
+
float delta[5]={1,-3,9.2,1.5,1.7};
int nums;
+
    float beta[7]={3.6,2.9,1,-3,9.2,1.5,1.7};
 +
    float alfa[2]={1.5,1.7};
 +
    int quant;
 +
 
 +
    quant = computar_num_acima_media(delta, 5);
 +
    quant = computar_num_acima_media(beta, 7);
 +
    quant = computar_num_acima_media(alfa, 2);
  
nums=num_acima_media(vet);
+
    return 0;
printf("Números lidos em vet que estão acima da média = %d\n", nums);
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
{{collapse bottom}}
 
{{collapse bottom}}
  
Linha 359: Linha 476:
 
</li>
 
</li>
  
{{collapse top|Solução - Exercício 06}}<syntaxhighlight lang=c>
+
{{collapse top|Solução - Exercício 06}}
 +
<syntaxhighlight lang=c>
 
//Autor: Victor Cesconetto De Pieri
 
//Autor: Victor Cesconetto De Pieri
  
Linha 392: Linha 510:
 
Sobre o exercício anterior, acrescente uma função para imprimir o número de 1s,...6s do vetor.
 
Sobre o exercício anterior, acrescente uma função para imprimir o número de 1s,...6s do vetor.
  
{{collapse top|Solução - Exercício 07}}<syntaxhighlight lang=c>
+
{{collapse top|Solução - Exercício 07}}
 +
<syntaxhighlight lang=c>
 
//Autor: Victor Cesconetto De Pieri
 
//Autor: Victor Cesconetto De Pieri
  
Linha 428: Linha 547:
 
<li>
 
<li>
 
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:
 
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:
<code>
+
<syntaxhighlight lang=c>
 
int compara_vetores(int vet1[],int vet2[], int tamanho)
 
int compara_vetores(int vet1[],int vet2[], int tamanho)
 
{
 
{
Linha 437: Linha 556:
 
</syntaxhighlight>  
 
</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).
+
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). A função deve retornar o valor 3, neste caso.
  
{{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>
  
Linha 482: Linha 603:
  
 
}
 
}
</syntaxhighlight>{{collapse bottom}}
+
</syntaxhighlight>
 +
-->
 +
{{collapse bottom}}
 +
</li>
 +
<li>
 +
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 independente de posição. Usar o comando ''for'' e ''break''.
 +
<syntaxhighlight lang=c>
 +
int retorna_quantidade_elementos_iguais(int vet1[],int vet2[], int tamanho)
 +
{
 +
  int num_elementos;
 +
 
 +
  return num_elementos;
 +
}
 +
</syntaxhighlight>
 +
 
 +
{{collapse top|Solução - Exercício 09}}
 +
<syntaxhighlight lang=c>
 +
int retorna_quantidade_elementos_iguais(int vet1[],int vet2[], int tamanho) {
 +
    int num_elementos;
 +
    int i, j, k;
 +
 
 +
    for (i = 0; i < tamanho; i++){
 +
        for (j = 0; j < tamanho; j++) {
 +
            /* testar se vet1[i] já foi testado anteriormente */
 +
            for (k=0;k<i;k++)
 +
                if (vet1[i]==vet1[k])
 +
                    break;
 +
            if k<i)
 +
              break;
 +
            /* testar se vet1[i] está  vet[2] */
 +
            if( vet1[i] == vet2[j]) {
 +
                num_elementos++;
 +
                break;
 +
            }
 +
        }
 +
    }
 +
    return num_elementos;
 +
}
 +
 
 +
int main()
 +
{
 +
    /* testar a função aqui!!! */
 +
    return 0;
 +
}
 +
</syntaxhighlight>
 +
{{collapse bottom}}
 +
 
 +
</li>
 +
</ol>
 +
 
 +
=DESAFIOS=
 +
 
 +
<ol>
 +
<li>
 +
Faça um uma função C para computar e retornar o desvio padrão <math>\sigma</math> de uma população representada por um vetor de reais.
 +
Dois parâmetros serão passados: o vetor e o tamanho do vetor.
 +
 
 +
  Usar:<br />
 +
 
 +
<math>\sigma = \sqrt{\frac{1}{N} \sum_{i=1}^N (x_i - \mu)^2}</math> (extraído da wikipedia [https://pt.wikipedia.org/wiki/Desvio_padr%C3%A3o])<br />
 +
 
 +
<math>\mu  = \frac{1}{N} \sum_{i=1}^N x_i</math> (extraído da wikipedia [https://pt.wikipedia.org/wiki/Desvio_padr%C3%A3o])<br />
 +
 
 +
SUGESTÃO: computar primeiramente a média <math>\mu</math>
 +
 
 +
OBS: Notar que o desvio padrão acima é de uma população. O desvio padrão  <math>S</math> de uma amostrausa a divisão por <math>N-1</math>. Uma discussão para a dsiciplina da estatística.
 +
Para resolução deste exercício deve-se usar uma função de raiz quadrada (ver https://en.cppreference.com/w/c/numeric/math/sqrt)
 
</li>
 
</li>
 
</ol>
 
</ol>

Edição das 08h05min de 26 de outubro de 2022

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;
  • implementar algoritmos simples usando vetores.

ARRAYS unidimensionais (vetores)

Um vetor pode ser visto como uma variável (uma caixa) dividida em partes menores (CAIXAS menores) acessadas por um índice (posição). Podemos dizer que cada elemento do vetor pode ser acessado através da indexação do vetor. Os elementos do vetor possuem um tipo único.

PRG1-vetor armario.png

Uma boa analogia é comparar o vetor com uma tabela de tamanho fixo onde em cada linha pode ser armazenado um elemento.

PRG1-tabela vetor.png

PROBLEMA: Ler 5 números inteiros para um vetor de inteiros (VET1). Computar um segundo vetor (VET2) que é o resultado da multiplicação do primeiro vetor por um escalar inteiro 5.

DADO DE ENTRADA: Os 5 números a serem armazenados em VET1 (nome do vetor onde serão armazenados os dados)

DADO DE SAÍDA: VET2, o vetor onde serão armazenados os resultados da multiplicação de cada elemento VET1 por 5.

ExplicacaoVetor1-Va.png


Definindo e usando vetores no C

Um vetor pode ser facilmente definido no C da forma:

tipo_vetor nome_do_vetor[dimensao];

O algoritmo do fluxograma da multiplicação de um vetor por 5 implementado anteriormente ficaria da seguinte forma em C:

#include <stdio.h>

int 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++;
  }
  return 0;
}

NOTA: Um vetor de tamanho N, na Linguagem C, começa SEMPRE na posição 0 indo até a posição N-1

Exercício de Fixação

Implementar um programa C para ler 10 números inteiros para um vetor e imprimir a quantidade (o número) de números acima da média.

OBS: Definir um contador, iniciado em zero. Ler os 10 números para um vetor e calcular a media. Fazer um segundo loop sobre o vetor testando cada item para verificar se é maior que a média. Incrementar o contador a cada item acima da média.

Este problema exige que os dados sejam armazenados previamente, de forma que a média calculada possa posteriormente ser usada para a computação da quantidade de números que estão acima da média.

  • DADOS DE ENTRADA: 10 números a serem fornecidos.
  • DADOS DE SAÍDA: Quantidade de números acima da média.

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]);
  } 
}

int main()
{
   int vet[5], i;

   ler_vet(vet);
   for (i=0;i<5;i++)
      printf("vet[%d]=%d\n",i,vet[i]);

   return 0;
}

Note como é realizada a declaração de parâmetros que são vetores. Observe no exemplo, que o vetor aux, durante a execução da função ler_vet é 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 uma função para realizar o produto escalar de 2 vetores de dimensão n. A função deve retornar o produto.
  2. Implementar uma função que troca os valores de dois vetores de dimensão 5. Siga o esqueleto abaixo. Implemente também uma função que imprime um vetor de dimensão 5. Use esta função para testar.
    #include <stdio.h>
    
    void troca_vetor(int a[5], int b[5])
    {
    
        return;
    }
    
    void imprime_vetor(int a[5])
    {
        int i;
        for (i = 0; i < 5; i++) {
            printf("vet[%d] => %d\n", i, a[i]);
        }
        printf("\n");
        return;
    }
    
    int main()
    {
        int x[5] = {3, 9, 7, 0, 2},
            y[5] = {10,11,0,3,7};
    
        troca_vetor (x , y);
        imprime_vetor (x);
    
        return 0;
    }
    
  3. Modificar a função anterior para que ela possa funcionar para quaisquer dimensão dos vetores. Siga o exemplo da função imprime_vetor() abaixo.
    #include <stdio.h>
    
    void troca_vetor(int a[], int b[], int tamanho)
    {
    
        return;
    }
    
    void imprime_vetor(int a[], int tamanho)
    {
        int i;
        for (i = 0; i < tamanho; i++) {
            printf("vet[%d] => %d\n", i, a[i]);
        }
        printf("\n");
        return;
    }
    
    int main()
    {
        int x[5] = {3, 9, 7, 0, 2},
            y[5] = {10,11,0,3,7};
    
        troca_vetor (x , y, 5);
        imprime_vetor (x, 5);
    
        return 0;
    }
    
  4. 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>
    
    int 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++;
    	}
     	return 0;	
    }
    
  5. Modificar o exercício para computar a média dos 10 números que estão no vetor.
  6. Solução - Exercício 02
    //Autor: Victor Cesconetto De Pieri
    
    #include <stdio.h>
     
     
    int 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);
    }
    
  7. 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);
    }
    
  8. Refazer os exercícios anteriores usando o comando 'for'.
  9. 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);
    }
    
  10. 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 N, a ser fornecido como parâmetro.
    Solução - Exercício 05
    #include <stdio.h>
    
    int  computar_num_acima_media(float x[], int n)
    {
        int i, cont;
        float soma, media;
    
        /* leitura do vetor */
        i=0;
        while (i<n) {
            soma = soma + x[i];
            i++;
        }
    
        /* calculo da media */
        media = soma /n;
    
        /* computação de números acima da média */
        cont = 0;
        i=0;
        while (i<n) {
            if (x[i] > media)
                cont++;
            i++;
        }
        return cont;
    }
    
    int main()
    {
    	float delta[5]={1,-3,9.2,1.5,1.7};
        float beta[7]={3.6,2.9,1,-3,9.2,1.5,1.7};
        float alfa[2]={1.5,1.7};
        int quant;
    
        quant = computar_num_acima_media(delta, 5);
        quant = computar_num_acima_media(beta, 7);
        quant = computar_num_acima_media(alfa, 2);
    
        return 0;
    }
    
  11. 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.
  12. 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();
    }
    
  13. 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();
    }
    
  14. 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;
    }
    

    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). A função deve retornar o valor 3, neste caso.

    Solução - Exercício 08
  15. 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 independente de posição. Usar o comando for e break.
    int retorna_quantidade_elementos_iguais(int vet1[],int vet2[], int tamanho)
    {
      int num_elementos;
    
      return num_elementos;
    }
    
    Solução - Exercício 09
    int retorna_quantidade_elementos_iguais(int vet1[],int vet2[], int tamanho) {
        int num_elementos;
        int i, j, k;
    
        for (i = 0; i < tamanho; i++){
            for (j = 0; j < tamanho; j++) {
                /* testar se vet1[i] já foi testado anteriormente */
                for (k=0;k<i;k++)
                    if (vet1[i]==vet1[k])
                        break;
                if k<i)
                  break;
                /* testar se vet1[i] está  vet[2] */
                if( vet1[i] == vet2[j]) {
                    num_elementos++;
                    break;
                }
            }
        }
        return num_elementos;
    }
    
    int main()
    {
        /* testar a função aqui!!! */
        return 0;
    }
    

DESAFIOS

  1. Faça um uma função C para computar e retornar o desvio padrão de uma população representada por um vetor de reais. Dois parâmetros serão passados: o vetor e o tamanho do vetor. Usar:
    (extraído da wikipedia [1])
    (extraído da wikipedia [2])
    SUGESTÃO: computar primeiramente a média OBS: Notar que o desvio padrão acima é de uma população. O desvio padrão de uma amostrausa a divisão por . Uma discussão para a dsiciplina da estatística. Para resolução deste exercício deve-se usar uma função de raiz quadrada (ver https://en.cppreference.com/w/c/numeric/math/sqrt)