Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - El_Java

#31
Aquí os dejo mi versión, tiene complejidad O(str.size()):

EDITO: Pongo el algoritmo como forma de función, thanks EI

Código (cpp) [Seleccionar]
#include <iostream>
#include <cctype>
using namespace std;

string extraer(const string &str){
   string aux;
   for(int a=0; a<(int)str.size(); a++) if(isdigit(str[a])) aux.push_back(str[a]);

   return aux;
}

int main(){
   string str;

   str = "ewiuc3dskhd8nkd62ndsnk9";
   //cin >> str;

   str = extraer(str);
   cout << str << endl;

   return 0;
}

#32
Claro que te lo explico, no hay problema:
en tu función lo que haces es ir añadiendo elementos del vector v al vector NUEVO vi, pero sin embargo, al terminar la función no retornas nada, por lo que el vector v va a seguir igual porque no lo has modificado, y el modificado vi no lo usas para nada, por lo que al terminar la función 'desaparece'.

tu función "arreglada":
Código (cpp) [Seleccionar]
#include <algorithm> //mete esto en los includes
void insereix(vector <double>& v){
    int n = v.size();
    int k = v[n-1];
    vector <double> vi(n);
    bool inserit = false;
    int j;

    for(int i = 0; i < n && !inserit; ++i){ //he cambiado and not por && !
        if(v[i] <= k){
            vi[i] = v[i];
        } else {
            vi[i] = k;
            inserit = true;
            j = i + 1;
        }
    }

    for(int i = j; i < n;++i){
        vi[i] = v[i-1]; //tambien te he metido el -1 en el v
    }

    swap(vi, v); //intercambia vi y v
}


saludos.
#34
Hombre, puestos a usar métodos predefinidos puedes usar la función sort (sí, es standar):
Código (cpp) [Seleccionar]
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

int main(){
    vector<double> v(7);
    v[0] = 2; v[1] = 4; v[2] = 7; v[3] = 7; v[4] = 8; v[5] = 9; v[6] = 5;
    // v == {2,4,7,7,8,9,5}
    for(int y=0; y<(int)v.size(); y++) cout << v[y];
    cout << endl;
    sort(v.begin(), v.end());
    // v == {2,4,5,7,7,8,9}
    for(int x=0; x<(int)v.size(); x++) cout << v[x];
    cout << endl;

    return 0;
}


Si no quieres usar la funcion sort, hazlo con las funciones que te da la clase vector, esta es tu función pero echa por mi:
Código (cpp) [Seleccionar]

void insereix(vector <double>& v){
    int x;
    for(x=0; x<(int)v.size(); x++) if(v[x] >= v[v.size()-1]) break; //para cuando encuentra un valor mas grande que v[v.size()-1]
    v.insert(v.begin()+x, v[v.size()-1]); //lo inserta en x
    v.erase(v.end()-1); //borra el ultimo valor
}


PD: En tu función v nunca cambia porque usas un vector auxiliar y la funcion es de tipo void, añade swap(v, vi); al final de tu función y #include <algorithm> al principio del archivo y verás que de todas formas no haces bien el ordenamiento.
#35
Programación C/C++ / Re: Ayuda con un programa en C
31 Diciembre 2011, 13:58 PM
(No estaría mal que subieras el código antes de pedir tareas, gracias)
#36
CONSEGUIDO! :D

La verdad Sagrini que a mi también me picaba la curiosidad sobre este tema, y me he puesto manos a la obra para investigar un poco sobre como funciona APT y todo eso. El caso que al final he llegado a un montón de información muy muy útil, dejo los links, porque explicar tanta cosa es muy dificil:
http://www.euskalnet.net/iosus/linux/Bash-Prompt-HOWTO-5.html#ss5.2 (Pto. 5.2)
http://es.wikipedia.org/wiki/C%C3%B3digo_escape_ANSI
http://www.chuidiang.com/clinux/ansi/ansi.php

Si ya has visto los links, sabrás que esto se consigue con códigos de escape ANSI, os dejo un ejemplo:
Código (cpp) [Seleccionar]
#include <cstdio>

int main(){
    cout << "Hola" << endl;
    for(int x=0; x<10; x++){
        printf("%c[1A \rProgreso: %d\n", 033, x);
        #ifdef _WIN32
        #include <Windows.h>
            Sleep(250);
        #else
            sleep(1);
        #endif
    }
    return 0;
}


Espero que os ayude tanto como a mí.
Un saludo!
#37
Lo más sencillo es que hagas una limpieza de terminal (como si fueran los fotogramas de un dibujo animado). Cada vez que vayas a mostrar algo haz justo antes esto:
Código (cpp) [Seleccionar]

#include <cstdlib>

#ifdef _WIN32
   system("cls"); //para windows
#else
   system("clear"); //para sistemas Linux
#endif


EDITO: he colocado bien el include, gracias a rir3760

Un saludo!
#38
llevas razón, el código que te he puesto es C++, culpa mía :P
No sé si te funcionará tu codigo, no conozco bien la funcion scanf, lo siento.
#39
Código (cpp) [Seleccionar]

string[6] str;
for(int x=0; x<6; x++) cin >> str[x];
#40
Complemento a dos de un numero:
Wikipedia: Otra forma es negar todos los dígitos (se haya el complemento a 1) y después sumar un 1 al resultado, viene a ser lo mismo que lo anteriormente explicado.

Código (cpp) [Seleccionar]

#include <iostream>
int main(){
    int num;
    cin >> num;

    cout << ((~num)+1) << endl;
}