Enviado em 24/03/2018 - 12:18h
Pessoal se puderem me ajudar. O problema é o seguinte:#include <stdio.h> #include <stdlib.h> int* uniao(int *v1, int n1, int *v2, int n2){ int soma = n1 + n2; int i=0, j=0; int *v3 = (int *) malloc(soma * sizeof(int)); for(i=0; i<3; i++){ (v3+i) = *(v1+i); } for(i=3; i<6; i++){ (v3+i) = *(v2+i-3); } int temp = v3[0]; for(i=0; i<3; i++){ for(j=i; j<6; j++){ if((v3+j) < (v3+i)){ temp = (v3+i); (v3+j) = (v3+i); (v3+i) = temp; } } } } int main(){ int v1[3], v2[3], v3[6], n1, n2; for(int i=0; i<3; i++){ printf("Digite os valores para o vetor 1: "); scanf("%d", (v1+i)); } for(int i=0; i<3; i++){ printf("Digite os valores para o vetor 2: "); scanf("%d", (v2+i)); } uniao(v1, 3, v2, 3); for(int i=0; i<3; i++){ printf("%d\n", *(v3+i)); } free(v3); }
Enviado em 24/03/2018 - 15:52h
(v3+i) = *(v1+i);
Enviado em 24/03/2018 - 16:30h
Prezado Hugo,#include <stdio.h> #include <stdlib.h> int* uniao(int *v1, int n1, int *v2, int n2){ int soma = n1 + n2; int i=0, j=0; int *v3 = (int *) malloc(soma * sizeof(int)); for(i = 0; i < n1; i++){ *(v3+i) = *(v1+i); } for(i = 3; i < (soma-n1); i++){ *(v3+i) = *(v2+i); } /*for(i=0; i<3; i++){ *(v3+i) = *(v1+i); } for(i=3; i<6; i++){ *(v3+i) = *(v2+i-3); } int temp = v3[0]; for(i=0; i<3; i++){ for(j=i; j<6; j++){ if((v3+j) < (v3+i)){ temp = *(v3+i); *(v3+j) = *(v3+i); *(v3+i) = temp; } } }*/ } int main(){ int v1[3], v2[3], v3[9], n1, n2; for(int i=0; i<3; i++){ printf("Digite os valores para o vetor 1: "); scanf("%d", (v1+i)); } for(int i=0; i<3; i++){ printf("Digite os valores para o vetor 2: "); scanf("%d", (v2+i)); } uniao(v1, 3, v2, 3); for(int i=0; i<6; i++){ printf("%d\n", *(v3+i)); } free(v3); }
Enviado em 24/03/2018 - 16:52h
O ajuste que você fez para os loops está correto. Sobre a passagem do vetor para a função main, é simples: como você retorna um valor de uma função para outra função? Usando o comando return. Inclusive foi bom você perguntar isso porque eu não tinha reparado que o retorno da função união (int *) não é compatível com o que efetivamente está sendo retornado por ela (void).int *v3 = 0; v3 = uniao(v1, 3, v2, 3);
Enviado em 24/03/2018 - 20:42h
Pois bem,const int n1 = 3; int v1[n1];
for(i = n1, j = 0; i < soma; i++, j++) { *(v3+i) = *(v2+j); }
Enviado em 25/03/2018 - 11:33h
Foi de uma grande ajuda sua e não fez perder meu tempo. Eu notei também que no segundo laço for tinha que ser o tamanho total. Outra dica sua de definir uma constante com valores fixos eu fiz um pouco diferente usando o #define MAX 3 no cabeçalho do programa e não sei se isso é a melhor forma, mas eu altero somente ali.Enviado em 25/03/2018 - 18:06h
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Como converter imagens PNG/JPEG para SVG em linha de comando
Fez porcaria no teu repositório Git? Aprenda a restaurar uma versão anterior do seu código!
Restaurando Fontes de Download do Hydra no Linux
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Como instalar o WPS com interface e corretor ortográfico em PT-BR no Arch Linux
Linux não desliga a tela da TV nunca (3)
Fila de impressão em C++ [RESOLVIDO] (6)
Bluetooth CSR 4.0 Dongle (Alternativo) (4)