elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Eliminar numero negativos de una matriz ( sin librerías)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Eliminar numero negativos de una matriz ( sin librerías)  (Leído 4,058 veces)
DamnSystem

Desconectado Desconectado

Mensajes: 131



Ver Perfil
Eliminar numero negativos de una matriz ( sin librerías)
« en: 14 Diciembre 2017, 01:07 am »

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
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Eliminar numero negativos de una matriz ( sin librerías)
« Respuesta #1 en: 14 Diciembre 2017, 02:19 am »

Simplemente debes generar un bucle, con dos índices, el del propio bucle (avance) y el de colocación.

Código:
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:
Código:
Bucle para k desde n hasta array.length
    Array(k) = 0
fin bucle


En línea

DamnSystem

Desconectado Desconectado

Mensajes: 131



Ver Perfil
Re: Eliminar numero negativos de una matriz ( sin librerías)
« Respuesta #2 en: 14 Diciembre 2017, 08:51 am »

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 Desconectado

Mensajes: 1.603



Ver Perfil
Re: Eliminar numero negativos de una matriz ( sin librerías)
« Respuesta #3 en: 14 Diciembre 2017, 12:32 pm »

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 Desconectado

Mensajes: 131



Ver Perfil
Re: Eliminar numero negativos de una matriz ( sin librerías)
« Respuesta #4 en: 14 Diciembre 2017, 13:15 pm »

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
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Eliminar numero negativos de una matriz ( sin librerías)
« Respuesta #5 en: 14 Diciembre 2017, 14:30 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Eliminar elemento de una matriz
Programación Visual Basic
_Sergi_ 4 2,594 Último mensaje 31 Agosto 2006, 14:05 pm
por Hans el Topo
Nesecito eliminar registros negativos y cero
.NET (C#, VB.NET, ASP)
luis456 6 3,820 Último mensaje 14 Febrero 2015, 11:39 am
por luis456
Poner numero aleatorio en una matriz
Programación C/C++
veravluis 0 1,689 Último mensaje 16 Febrero 2016, 15:23 pm
por veravluis
numero aleatorios en matriz 3*3 sin repetir
Programación C/C++
creiko 1 7,160 Último mensaje 18 Mayo 2016, 17:34 pm
por FurioMoltisanti
Buscar un numero en la matriz
Programación C/C++
Palante 0 1,823 Último mensaje 19 Febrero 2017, 18:51 pm
por Palante
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines