Autor
|
Tema: Eliminar numero negativos de una matriz ( sin librerías) (Leído 4,473 veces)
|
DamnSystem
Desconectado
Mensajes: 131
|
llevo ya mas de dos horas y nada os pongo lo que tengo, la idea es con una matriz que yo he definido en el main eliminar los números negativos de dentro:
// Realizar un módulo para eliminar todos los valores negativos de un vector de // enteros. Hacedlo sobre el mismo vector, y sin usar vectores auxiliares. // Por ejemplo, después de aplicar dicho módulo al vector (2,-3,1,8,5), éste debe // quedarse con (2,1,8).
#include <iostream> using namespace std;
void adios_negativos(int _vector[], int _longitud_vector);
int main() { // Variables y constantes int longitud_vector = 8; int vector[] = {-1, -2, 3, 4, -7, 8, 9, -11}; // Desarrallo del programa adios_negativos(vector, longitud_vector); for(int k = 0; k < longitud_vector; k++){ cout << vector[k]; } return 0; }
void adios_negativos(int _vector[], int _longitud_vector){ for(int i = 0; i < _longitud_vector; i++){ if(_vector < 0){ for(int j = i; j < _longitud_vector; j++){ _vector[j] = _vector[j+1]; } } } }
|
|
|
En línea
|
<3 Stay Hungry, Stay Foolish <3
|
|
|
Serapis
|
Simplemente debes generar un bucle, con dos índices, el del propio bucle (avance) y el de colocación. entero k, n
bucle para k desde 0 hasta array.length Si (array(k)>=0) luego array(n) = array(k) n += 1 Fin si fin bucle k es el índice de avance del bucle. n es el índice de escritura sobre el array. Éste deja de avanzar cuando encuentra un número negativo. Es algo que si tomas un papel y lápiz y lo haces paso a paso a mano, lo sacas... Al final del bucle quedarán (array.length - n) ítems sin alterar, que equivale a la cuenta de números negativos encontrados, tu sabrás que se te pide que hagas con ellos, quizás simplemente ponerlos a 0: Bucle para k desde n hasta array.length Array(k) = 0 fin bucle
|
|
|
En línea
|
|
|
|
DamnSystem
Desconectado
Mensajes: 131
|
no puedo usar funciones ... . La cosa es que yo lo que intento es coger la primera posicion del vector[0], si el numero que tiene es negativo cojo con otro bucle el de la posicion siguiente y lo desplazo a esa posicion asi hasta recorrer todo el bucle vuelvo a la posicion inicial asi hasta eliminar todos los numeros negativo y redimensionar la matriz, pero no se como hacerlo, esto es lo que llevo y el compilador me arroja -272632288-27263228834-27266322889. // Realizar un módulo para eliminar todos los valores negativos de un vector de // enteros. Hacedlo sobre el mismo vector, y sin usar vectores auxiliares. // Por ejemplo, después de aplicar dicho módulo al vector (2,-3,1,8,5), éste debe // quedarse con (2,1,8). #include <iostream> using namespace std; void adios_negativos(int _vector[], int _longitud_vector); int main() { // Variables y constantes const int longitud_vector = 8; int vector[] = {-1, -2, 3, 4, -7, 8, 9, -11}; // Desarrallo del programa adios_negativos(vector, longitud_vector); for(int k = 0; k < longitud_vector; k++){ cout << vector[k]; } return 0; } void adios_negativos(int _vector[], int _longitud_vector){ for(int i = 0; i < _longitud_vector; i++){ if(_vector < 0){ for(int j = 0; j < _longitud_vector; j++){ _vector = _vector[j+1]; } } } }
|
|
|
En línea
|
<3 Stay Hungry, Stay Foolish <3
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Un array declarado como int array[dimensión] siempre será del tamaño dimensión. Son estáticos y no se pueden redimensionar. Para eliminar deberían ser dinámicos.
De todas formas se te prohíbe el uso de librerías, no de funciones, por lo que supongo que te piden que hagas un array dinámico con las funciones de insertar, eliminar, leer, etc. Pero que te las tienes que hacer.
|
|
|
En línea
|
|
|
|
DamnSystem
Desconectado
Mensajes: 131
|
SOLUCIONADO EL PROBLEMA:
// Realizar un módulo para eliminar todos los valores negativos de un vector de // enteros. Hacedlo sobre el mismo vector, y sin usar vectores auxiliares. // Por ejemplo, después de aplicar dicho módulo al vector (2,-3,1,8,5), éste debe // quedarse con (2,1,8).
#include <iostream> using namespace std;
void adios_negativos(int _vector[], int &_longitud_vector);
int main() { // Variables y constantes int longitud_vector = 8; int vector[] = {-1, -2, 3, 4, -7, 8, 9, -11}; // Desarrallo del programa adios_negativos(vector, longitud_vector); for(int k = 0; k < longitud_vector; k++){ cout << vector[k]; } cout << endl; return 0; }
void adios_negativos(int _vector[], int &_longitud_vector){ for(int i = 0; i < _longitud_vector; i++){ if(_vector < 0){ for(int j = i; j < _longitud_vector -1; j++){ _vector[j] = _vector[j+1]; } _longitud_vector--; i--; } } }
|
|
|
En línea
|
<3 Stay Hungry, Stay Foolish <3
|
|
|
Serapis
|
Ineficiente. La solución que pones usa dos bucles con cada negativo hallado, desplazas todo el contenido del array por encima de él, cada vez.
La solución que yo te ofrecí (que puedes ponerla en una función o no), solo requiere recorrer una única vez el bucle, luego necesita 'k-n' comparaciones y 'n' asginaciones. Incluso para poner a 0 los valores finales en el array (que entonces las asginaciones serían n+ (k-n)) ). Siendo k el tamaño del array y n los positivos encontrados (y k-n los negativos).
|
|
« Última modificación: 14 Diciembre 2017, 14:45 pm por NEBIRE »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Eliminar elemento de una matriz
Programación Visual Basic
|
_Sergi_
|
4
|
2,799
|
31 Agosto 2006, 14:05 pm
por Hans el Topo
|
|
|
Nesecito eliminar registros negativos y cero
.NET (C#, VB.NET, ASP)
|
luis456
|
6
|
4,107
|
14 Febrero 2015, 11:39 am
por luis456
|
|
|
Poner numero aleatorio en una matriz
Programación C/C++
|
veravluis
|
0
|
1,887
|
16 Febrero 2016, 15:23 pm
por veravluis
|
|
|
numero aleatorios en matriz 3*3 sin repetir
Programación C/C++
|
creiko
|
1
|
7,485
|
18 Mayo 2016, 17:34 pm
por FurioMoltisanti
|
|
|
Buscar un numero en la matriz
Programación C/C++
|
Palante
|
0
|
2,055
|
19 Febrero 2017, 18:51 pm
por Palante
|
|