Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error con rand() y memcpy()

Estas en el tema de Error con rand() y memcpy() en el foro de C/C++ en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include <iostream> #include <iomanip> #include <cstdlib> #include "Matriz2D-1.h"     using namespace std ;     Matriz2D_1 CreaMatriz2D_1 ( ...
  #1 (permalink)  
Antiguo 06/04/2013, 06:49
 
Fecha de Ingreso: enero-2013
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 0
Error con rand() y memcpy()

Código C++:
Ver original
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <cstdlib>
  4. #include "Matriz2D-1.h"
  5.  
  6.  
  7. using namespace std;
  8.  
  9.  
  10. Matriz2D_1 CreaMatriz2D_1 (int fils, int cols)
  11. {
  12.  
  13.     Matriz2D_1 matriz = new int *[fils];   
  14.  
  15.     for (int f=0;f<fils;f++)
  16.         matriz[f] = new int [cols];
  17.  
  18.     return(matriz);
  19. }
  20.  
  21. Matriz2D_1 AleatorizaMatriz2D_1 (int fils, int cols, int MAX)
  22. {  
  23.     Matriz2D_1 aleatoria = CreaMatriz2D_1 (fils, cols);
  24.     for (int f=0; f<fils; f++)
  25.         for (int c=0; c<cols; c++)
  26.             aleatoria[f][c] = rand(MAX);
  27.        
  28.     return (aleatoria);
  29. }
  30.  
  31. Matriz2D_1 LeeMatriz2D_1 (int fils, int cols)
  32. {
  33.     Matriz2D_1 matriz = CreaMatriz2D_1 (fils, cols);
  34.     int valor;
  35.     for (int f=0;f<fils;f++)
  36.         for (int c=0;c<cols;c++){
  37.             cout << "Introduce el valor de matriz[" << f << "][" << c << "]: ";
  38.             cin >> valor;
  39.             matriz[f][c]=valor;
  40.         }
  41.     return(matriz);
  42. }
  43.  
  44. void PintaMatriz2D_1 (Matriz2D_1 matriz, int fils, int cols)
  45. {
  46.     for (int f=0;f<fils;f++){
  47.         for (int c=0;c<cols;c++)
  48.             cout << setw(5) << matriz[f][c];
  49.     cout << endl;
  50.     }
  51. }
  52.  
  53.  
  54.  
  55. Matriz2D_1 CopiaMatriz2D_1 (Matriz2D_1 matriz, int fils, int cols)
  56. {
  57.     Matriz2D_1 copia = CreaMatriz2D_1 (fils, cols);
  58.  
  59.     for (int f=0; f<fils; f++)
  60.         memcpy (copia[f], matriz[f], cols*sizeof(int));
  61.     return (copia);
  62.  
  63. }
  64.  
  65. Matriz2D_1 SubMatriz2D_1 (Matriz2D_1 matriz, int fil_init, int col_init, int fil_end, int col_end)
  66. {
  67.     int fils_submatriz = fil_end - fil_init + 1;
  68.     int cols_submatriz = col_end + col_init + 1;
  69.  
  70.     Matriz2D_1 submatriz = CreaMatriz2D_1 (fils_submatriz, cols_submatriz);
  71.     int fila_submatriz=0;
  72.     int col_submatriz=0;
  73.     for (int f=fil_init-1; f<fil_end; f++, fila_submatriz++)
  74.         for (int c=col_init-1; c<col_end; c++, col_submatriz++)
  75.             memcpy (submatriz[fila_submatriz][col_submatriz], matriz[f][c], sizeof(int));
  76.    
  77.     return (submatriz);
  78. }
  79.  
  80.  
  81. Matriz2D_1 EliminaColumnaMatriz2D_1 (Matriz2D_1 matriz, int fils, int cols, int columna)
  82. {
  83.     Matriz2D_1 reducida2 = CreaMatriz2D_1 (fils, cols-1);
  84.     int col_reducida=0;
  85.    
  86.     for (int f=0; f<fils; f++)
  87.         for (int c=0; c<columna; c++, col_reducida++)
  88.             memcpy (reducida2[f][col_reducida], matriz[f][c], sizeof(int));
  89.  
  90.     for (int f=0; f<fils; f++)
  91.         for (int c=columna+1; c<cols; c++, col_reducida++)
  92.             memcpy (reducida2[f][col_reducida], matriz[f][c], sizeof(int));
  93.    
  94.     return (reducida2);
  95.  
  96.  
  97.  
  98. }
  99.  
  100. Matriz2D_1 EliminaFilaMatriz2D_1 (Matriz2D_1 matriz, int fils, int cols, int fila_borrar)
  101. {
  102.     Matriz2D_1 reducida = CreaMatriz2D_1 (fils-1, cols);
  103.  
  104.     int fila_reducida = 0;
  105.     for (int f=0; f<fila_borrar; f++, fila_reducida++)
  106.         memcpy (reducida[fila_reducida], matriz[f], cols*sizeof(int));
  107.     for (int f=fila_borrar+1; f<fils; f++, fila_reducida++)
  108.         memcpy (reducida[fila_reducida], matriz[f], cols*sizeof(int));
  109.  
  110.     return (reducida);
  111. }
  112.  
  113. Matriz2D_1 TraspuestaMatriz2D_1 (Matriz2D_1 matriz, int fils, int cols)
  114. {
  115.     Matriz2D_1 transpuesta = CreaMatriz2D_1 (fils, cols);
  116.     for (int f=0;f<fils;f++)
  117.         for (int c=0;c<cols;c++)
  118.             memcpy (transpuesta[c][f], matriz[f][c], sizeof(int));
  119.  
  120.     return (transpuesta);
  121. }
  122.  
  123. Matriz2D_1 InvierteMatriz2D_1 (Matriz2D_1 matriz, int fils, int cols)
  124. {
  125.     Matriz2D_1 invertida = CreaMatriz2D_1 (fils, cols);
  126.     int fila_invertida=fils-1;
  127.     for (int f=0; f<fils; f++, fila_invertida--)
  128.         memcpy (invertida[fila_invertida], matriz[f], cols*sizeof(int));
  129.  
  130.     return (invertida);
  131.        
  132. }
  133.                    
  134. void LiberaMatriz2D_1 (Matriz2D_1 matriz,int fils,int cols)
  135. {
  136.     for (int f=0;f<fils;f++)
  137.         delete [] matriz[f];
  138.  
  139.     delete matriz;
  140. }

Si lo compilo me sale los siguientes errores:

Código HTML:
src/Matriz2D-1.cpp: In function ‘int** AleatorizaMatriz2D_1(int, int, int)’:
src/Matriz2D-1.cpp:26:30: error: too many arguments to function ‘int rand()’
/usr/include/stdlib.h:380:12: note: declared here
src/Matriz2D-1.cpp: In function ‘int** CopiaMatriz2D_1(Matriz2D_1, int, int)’:
src/Matriz2D-1.cpp:60:48: error: ‘memcpy’ was not declared in this scope
src/Matriz2D-1.cpp: In function ‘int** SubMatriz2D_1(Matriz2D_1, int, int, int, int)’:
src/Matriz2D-1.cpp:75:79: error: ‘memcpy’ was not declared in this scope
src/Matriz2D-1.cpp: In function ‘int** EliminaColumnaMatriz2D_1(Matriz2D_1, int, int, int)’:
src/Matriz2D-1.cpp:88:65: error: ‘memcpy’ was not declared in this scope
src/Matriz2D-1.cpp:92:65: error: ‘memcpy’ was not declared in this scope
src/Matriz2D-1.cpp: In function ‘int** EliminaFilaMatriz2D_1(Matriz2D_1, int, int, int)’:
src/Matriz2D-1.cpp:106:63: error: ‘memcpy’ was not declared in this scope
src/Matriz2D-1.cpp:108:63: error: ‘memcpy’ was not declared in this scope
src/Matriz2D-1.cpp: In function ‘int** TraspuestaMatriz2D_1(Matriz2D_1, int, int)’:
src/Matriz2D-1.cpp:118:56: error: ‘memcpy’ was not declared in this scope
src/Matriz2D-1.cpp: In function ‘int** InvierteMatriz2D_1(Matriz2D_1, int, int)’:
src/Matriz2D-1.cpp:128:65: error: ‘memcpy’ was not declared in this scope
  #2 (permalink)  
Antiguo 06/04/2013, 07:22
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Error con rand() y memcpy()

Pues eso, para el rand() envias un argumento cuando el prototipo de rand no espera ninguno, y el memcpy no lo reconoce porque está declarado en la cabecera cstring (string.h) no incluida al proyecto.

Saludos
vosk
  #3 (permalink)  
Antiguo 06/04/2013, 07:31
 
Fecha de Ingreso: enero-2013
Mensajes: 25
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Error con rand() y memcpy()

Ok, ya quite el argumento de rand() y puse el #include "string.h" pero ahora me sale esto:
Código HTML:
Ver original
  1. src/Matriz2D-1.cpp: In function int** SubMatriz2D_1(Matriz2D_1, int, int, int, int):
  2. src/Matriz2D-1.cpp:76:79: error: invalid conversion from int to void* [-fpermissive]
  3. /usr/include/string.h:44:14: error:   initializing argument 1 of void* memcpy(void*, const void*, size_t) [-fpermissive]
  4. src/Matriz2D-1.cpp:76:79: error: invalid conversion from int to const void* [-fpermissive]
  5. /usr/include/string.h:44:14: error:   initializing argument 2 of void* memcpy(void*, const void*, size_t) [-fpermissive]
  6. src/Matriz2D-1.cpp: In function int** EliminaColumnaMatriz2D_1(Matriz2D_1, int, int, int):
  7. src/Matriz2D-1.cpp:89:65: error: invalid conversion from int to void* [-fpermissive]
  8. /usr/include/string.h:44:14: error:   initializing argument 1 of void* memcpy(void*, const void*, size_t) [-fpermissive]
  9. src/Matriz2D-1.cpp:89:65: error: invalid conversion from int to const void* [-fpermissive]
  10. /usr/include/string.h:44:14: error:   initializing argument 2 of void* memcpy(void*, const void*, size_t) [-fpermissive]
  11. src/Matriz2D-1.cpp:93:65: error: invalid conversion from int to void* [-fpermissive]
  12. /usr/include/string.h:44:14: error:   initializing argument 1 of void* memcpy(void*, const void*, size_t) [-fpermissive]
  13. src/Matriz2D-1.cpp:93:65: error: invalid conversion from int to const void* [-fpermissive]
  14. /usr/include/string.h:44:14: error:   initializing argument 2 of void* memcpy(void*, const void*, size_t) [-fpermissive]
  15. src/Matriz2D-1.cpp: In function int** TraspuestaMatriz2D_1(Matriz2D_1, int, int):
  16. src/Matriz2D-1.cpp:119:56: error: invalid conversion from int to void* [-fpermissive]
  17. /usr/include/string.h:44:14: error:   initializing argument 1 of void* memcpy(void*, const void*, size_t) [-fpermissive]
  18. src/Matriz2D-1.cpp:119:56: error: invalid conversion from int to const void* [-fpermissive]
  19. /usr/include/string.h:44:14: error:   initializing argument 2 of void* memcpy(void*, const void*, size_t) [-fpermissive]

Gracias por la ayuda.
  #4 (permalink)  
Antiguo 06/04/2013, 08:34
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Error con rand() y memcpy()

"...invalid conversion from ‘int’ to ‘void*’..."

Estas usando la funcion memcpy de forma incorrecta: esa funcion espera una direccion (un puntero o una referencia), pero tu le estas enviando un valor (lo que seria una desreferencia):

Código:
typedef int** Matriz2D_1;

Matriz2D_1 submatriz;
memcpy (&submatriz[fila_submatriz][col_submatriz], &matriz[f][c], sizeof(int));

submatriz[fila_submatriz][col_submatriz] y matriz[f][c] son valores (desreferencia)
&submatriz[fila_submatriz][col_submatriz] y &matriz[f][c] son punteros (referencia)
Una cosa, antes de usar rand() has llamado a srand()?

Saludos
vosk

Etiquetas: int, matriz, rand
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:15.