Ir ao conteúdo
  • Cadastre-se

Maria_epbn

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

posts postados por Maria_epbn

  1. @AnsiC o professor pediu apenas uma função.

     

     Enunciado: Crie uma função que receba como parâmetros dois vetores de inteiros: x1 e x2 e as suas respectivas quantidades de elementos n1 e n2. A função deverá retornar um ponteiro para um terceiro vetor, x3, alocado dinamicamente, contendo a união de x1 e x2 e usar o ponteiro qtd para retornar o tamanho de x3. Sendo x1={1,3,5,6,7} e x2={1,3,4,6,8}, x3 irá conter {1,3,4,5,6,7,8}. Imprima x3 na main.

      Protótipo: int* uniao (int *x1, int *x2, int n1, int n2, int *qtd);

     

     

  2. Olá,@AnsiC, este é o erro do programa. Os elementos 8 e 7 deveriam estar inclusos no vetor união mas quando compilo o programa só aparecem os elementos 1         3        5        4        6.

     

    meu programa está assim:

    #include <stdio.h>
    #include <stdlib.h>
    
    int *uniao (int *x1, int *x2, int n1, int n2, int *qtd);
    
    int main()
    { int i, x1[]={1,3,5,6,7}, x2[]={1,3,4,6,8}, *x3, tam1, tam2, tam3;
    
      tam1 = 5;
      tam2 = 5;
      tam3 = tam1 + tam2;
    
      if (x1==NULL)
      { printf("\n\nImpossível alocar memória.\n\n");
        return 1;
      }
      
    
    
      if (x2==NULL)
      { printf("\n\nImpossível alocar memória.\n\n");
        return 1;
      }
      
    
      
    
      // IMPRIMINDO OS VETORES
    
      printf("\n\nVetor 1: ");
      for(i=0; i<tam1; i++)
      { printf("\t%d", *(x1+i));
      }
    
      printf("\n\n");  
    
       printf("\n\nVetor 2: ");
      for(i=0; i<tam2; i++)
      { printf("\t%d", *(x2+i));
      }
     
      x3 = (int*)malloc(tam3*sizeof(int));
    
      x3 = uniao(x1,x2,tam1,tam2,x3);
    
      printf("\n\nVetor união: ");
      for(i=0; i<tam1; i++)
      { printf("\t%d", *(x3+i));
      }
    
      printf("\n\n");
    
    
    } 
    
    int *uniao (int *x1, int *x2, int n1, int n2, int *qtd)
    { int i=0, j=0, *x3;
    
    
       x3 = (int*)malloc((n1+n2) * sizeof(int));
       
       if (x3 == NULL)
       {    printf("\n\nImpossível alocar memória.\n\n");
            return 0;
       }
       
     
      for(i=0; i<(n1+n2); i++)
      { if(*(x1+i)== *(x2+i))
        { *(x3+j) = *(x1+i);
            j++;
        }
        else if(*(x1+i)<*(x2+i))
        {    *(x3+j) = *(x1+i);
             *(x3+j+1) = *(x2+i);
              j=j+2;
        }
        else if (*(x1+i)>*(x2+i))
        { *(x3+j) = *(x1+i);
               *(x3+j+1) = *(x2+i);
               j=j+2;
        }
    
    
      }
    
    return (x3);
    }

     

  3. Crie uma função que receba como parâmetros dois vetores de inteiros: x1 e x2 e as suas respectivas quantidades de elementos n1 e n2. A função deverá retornar um ponteiro para um terceiro vetor x3, alocado dinamicamente, contendo a união de x1 e x2 e usar o ponteiro qtd para retornar o tamanho de x3.

    •  Eu fiz a função mas na hora de compilar não aparece todos os elementos de x3, está aparecendo apenas os 5 primeiros.                                     

                              ex.:

                                         Vetor 1:         1         3        5        6        7

                                         Vetor 2:         1         3        4        6        8

                                         Vetor união:   1         3        5        4        6

    int *uniao (int *x1, int *x2, int n1, int n2, int *qtd)
    { int i=0, j=0, *x3;
    
    
       x3 = (int*)malloc((n1+n2) * sizeof(int));
       
       if (x3 == NULL)
       {    printf("\n\nImpossível alocar memória.\n\n");
            return 0;
       }
       
     
      for(i=0; i<(n1+n2); i++)
      { if(*(x1+i)== *(x2+i))
        { *(x3+j) = *(x1+i);
            j++;
        }
        else if(*(x1+i)<*(x2+i))
        {    *(x3+j) = *(x1+i);
             *(x3+j+1) = *(x2+i);
              j=j+2;
        }
        else if (*(x1+i)>*(x2+i))
        { *(x3+j) = *(x1+i);
            *(x3+j+1) = *(x2+i);
            j=j+2;
        }
        
    
      }
    return (x3);
    }

     

    • Obrigado 1
  4. Escreva um programa que leia o tamanho e aloque memória para dois vetores reais de mesmo tamanho, leia os dados e preencha os vetores e imprima os vetores.

    Chame uma função que receba dois vetores, o tamanho e uma variável ponteiro. a função deve calcular a soma dos elementos do vetor v1 e o produto entre os elementos do vetor v2. a função deve retornar a soma dos elementos de v1. Imprima os valores na main.

     

    •    O meu programa não está aparecendo nenhum erro na hora de compilar, mas quando o programa dá o resultado da soma o valor que está aparecendo é errado.

        

                          ex.:   v1 =  1.0000             2.0000            3.0000

                                  Soma dos elementos de v1 = 0.0000

    #include <stdio.h>
    #include <stdlib.h>
    
    void *SomaProduto (float *vet1, float *vet2, int tam, float *somaelem);
    
    int main()
    {
    
       float *v1, *v2, *somaelem;
      int tam, i;
    
      printf("Qual o tamanho dos vetores? ");
      scanf("%d", &tam);
     
      
    
      v1 = (float*)malloc(tam * sizeof(float));
      v2 = (float*)malloc(tam * sizeof(float));
    
      if(v1==NULL || v2==NULL)
       { printf("\nImpossível alocar memória.\n");
         return 1;
       }
    
      printf("Lendo vetor 1: \n\n");
     
    
      for(i=0;i<tam;i++)
      { printf("\n\nElemento [%d]: ", i);
        scanf("%f", (v1+i));
      }
    
       printf("Lendo vetor 2: \n\n");
     
    
      for(i=0;i<tam;i++)
      { printf("\n\nElemento [%d]: ", i);
        scanf("%f", (v2+i));
      }
    
      printf("\n\nImprimindo vetor 1:\n ");
      
      for(i=0;i<tam;i++)
      { printf("\t%f", *(v1+i));
      }
    
      printf("\n\nImprimindo vetor 2:\n ");
      
      for(i=0;i<tam;i++)
      { printf("\t%f", *(v2+i));
      }
    
    
      somaelem = SomaProduto(v1,v2,tam, somaelem);
                  printf("\n\nSoma dos elementos do vetor v1 = %f", *somaelem);
                  printf("\n\n\n");
    }
     
    void *SomaProduto (float *vet1, float *vet2, int tam, float *somaelem)
    {   float produtoelem;
        int i;
    
        somaelem = (float*)malloc(tam * sizeof(float));
        *somaelem=0;
    
        for(i=0; i<tam; i++);
        {  
           *somaelem += *(vet1+i);
        }
        produtoelem=0;
        for(i=0; i<tam; i++)
        { produtoelem = produtoelem * (*(vet2+i));
        }
     
      return (somaelem);
        
    }

     

  5. Você tinha razão aquele primeiro for estava errado.

    Agora ficou assim a função e não está mais dando erro.

    Muito obrigada pela ajuda!

    void *MaiorMenor (float *vet1, float *vet2, int tam, float *maior)
    {   float *menor;
        int i;
    
      maior = (float*)malloc(tam * sizeof(float));
      maior = (vet1+0);
    
          for(i=0; i<tam; i++)
          {  if(*(vet1+(tam-i-1)) > *maior) 
             {  *maior = *(vet1+(tam-i-1));
             }
          }
        
      menor = (float*)malloc(tam * sizeof(float));
      menor = (vet2+0);
    
          for(i=0; i<tam; i++)
          {  if(*(vet2+(tam-i-1)) < *menor) 
             {  *menor = *(vet1+(tam-i-1));
             }
          }
        
      return (maior);
    }

     

  6. Meu programa esta dando falha de segmentação nessa função. 

     

    Uma função que recebe dois vetores, o seu tamanho e uma variável ponteiro. A função deve achar o maior elemento do vetor v1 e o menor elemento do vetor v2. A função deve retornar o valor do maior elemento de v1.

    void *MaiorMenor (float *vet1, float *vet2, int tam, float *maior)
    {   float *menor;
        int i;
    
      maior = (float*)malloc(tam * sizeof(float));
       
        for(maior=0; maior<tam; maior++)
        { for(i=0; i<tam; i++)
          {  if(*(vet1+(tam-i-1)) > *maior) 
             {  *maior = *(vet1+(tam-i-1));
             }
          }
        }
      menor = (float*)malloc(tam * sizeof(float));
        for(menor=0; menor<tam; menor++)
        { for(i=0; i<tam; i++)
          {  if(*(vet2+(tam-i-1)) < *menor) 
             {  *menor = *(vet1+(tam-i-1));
             }
          }
        }
      return (maior);
    }

     

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!