ASHASHIN Posted May 19, 2012 at 10:42 AM Report #456821 Posted May 19, 2012 at 10:42 AM (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 May 19, 2012 at 10:49 AM by ASHASHIN
HappyHippyHippo Posted May 19, 2012 at 11:30 AM Report #456826 Posted May 19, 2012 at 11:30 AM 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 Portugol Plus
ASHASHIN Posted May 19, 2012 at 12:15 PM Author Report #456832 Posted May 19, 2012 at 12:15 PM (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 May 19, 2012 at 12:19 PM by ASHASHIN
HappyHippyHippo Posted May 19, 2012 at 01:27 PM Report #456842 Posted May 19, 2012 at 01:27 PM (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 May 19, 2012 at 01:36 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now