Jump to content

Recommended Posts

Posted (edited)

Estou a fazer um programa em que uma das funções deve concatenar 2 arrays (1 dos arays pode ser o resultado da concatenação de outros 2) mas, independentemente to tamanho dos arrays o resultado nunca é o pretendido.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int q; //nº elementos array1
int array1[1024];
int array2[1024];
int array3[1024];
int array4[1024];
int i;

void multer ()//multiplica array1 por um int
{
for(i = 0; i<q; i++){
array1[i] = 1* array1[i];
array2[i] = 2* array1[i];
array3[i] = 3* array1[i];
array4[i] = 4* array1[i];
}
}
void merger() //concatena os arrays
{
multer();
 for( i = 0 ; i < q ; i++)
 array2[i+(q-1)] = array1[i];
 for (i=0; i < ((q*2)-1); i++)
 array3[i+((q*2)-1)] = array2[i];
 for (i=0; i < ((q*3)-1); i++)
 array4[i+((q*3)-1)] = array3[i];
}
int main()
{
scanf("%d",&q);
for (i=0; i<q; i++){
scanf("%d",&array1[i]);}
merger ();
printf("Arrya4 = ");
for( i = 0 ; i < 40 ;i++)
printf("%d " , array4[i]);
return 0;
}

neste caso estou a imprimir o array 4 o resultado se array1 = 1 2 3 4 deveria ser: Array4 = 4 8 12 16 3 6 9 12 2 4 6 8 1 2 3 4

mas em vez disso imprime: Array4 = 4 8 12 16 0 0 0 0 0 0 0 3 6 9 12 0 0 0 2 4 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

os zeros não me chateiam muito pois posso remove-los depois de ordenar o array mas o facto de nem todos os valores pretendidos aparecemrem e na parte "2 4 6 1" aparecer "1" em vez 8 e a ultima sequencia (repetição do array1) não ser apresentada está-me a deixar um bocado chateado, se alguém me pudesse dizer onde está o erro agradecia muito.

EDIT1: correcção de erro na main

Edited by ASHASHIN
Posted

que complicação que prai vai ...

// usando as tuas variáveis globais, mesmo que seja desaconselhável
void merger() {
 int i = 0;
 int j = 0;
 for (i=0; i< 4; i++) { // 4 arrays
   for (j=0; j<q; j++) // cada posição do array
     array4[j+(i*q)] = array1[j]*(4-i); // atribuir à posição do array a multiplicação do elemento do array 1
 }
}

conclusão ... array2 e array3 não fazem nada

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

conclusão ... array2 e array3 não fazem nada

não fazem nada neste caso, se eu quisesse imprimir o array 3 ele já ia ser necessário e no problema real (que eu não descrevi aqui) posso vir a precisar dele, daí ter feito aquela complicação toda.

P.S.: porque é que as variaveis globais são desaconselhaveis? o meu professor usa-as bastante

Edited by ASHASHIN
Posted (edited)

se queres concatenação de arrays, faz como deve ser:


#include <stdio.h>

int * concat(int * dest, int * lista1, size_t n_lista1, int * lista2, size_t n_lista2) {
 size_t i;
 for (i = 0; i < n_lista1; i++)
   dest[i] = lista1[i];
 for (i = 0; i < n_lista2; i++)
   dest[n_lista1 + i] = lista2[i];
 return dest;
}

int main(void) {
 int lista1[4] = {1,  2,  3,  4};
 int lista2[4] = {5,  6,  7,  8};
 int lista3[4] = {9, 10, 11, 12};
 int lista4[4] = {13, 14, 15, 16};
 int resultado[16];
 int i;

 concat(resultado, concat(resultado, concat(resultado, lista1, 4, lista2, 4), 8, lista3, 4), 12, lista4, 4);
 for (i = 0; i < 16; i++)
printf("%d ", resultado[i]);
 printf("\n");

 return 0;
}

acredito que o teu professor só usa variáveis globais porque ainda não deve ter falado na passagem de argumentos por valor nas funções.

exemplo de como as variáveis globais são desaconselháveis:

//------------------
// lista.h
int count = 3;
int lista[3];

void print_lista();

//------------------


//------------------
// lista.c
#include "lista.h"
#include <stdio.h>

void print_lista() {
 int i;
 for(i = 0; i < count; i++)
printf("i(%d) = %d\n", i, lista[i]);
}

//------------------


//------------------
// main.c
#include "lista.h"

int main(void) {
 lista[0] = 10;
 lista[1] = 20;
 lista[2] = 30;

 print_lista(); // o output desta lista não é 10, 20 30

 return 0;
}
//------------------
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.