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 - AlucardDracula

#11
Cita de: Almapa en 17 Diciembre 2013, 20:57 PM
Parece un problema interesante, tienes algo hecho ya? Así no partimos de 0 y además creo que la tarea es tuya no nuestra. ;)

Un saludo

De momento tengo esto, pero esta inacabado porque llegado a un punto me lie demasiado xD

Lo que tenia en mente era algo como esto para una matriz 3x3 que tiene 5 diagonales (las secundarias).
k = 0;
(0,0)
--------
k = 1;
(0,1)
(1,0)
-------
k=2;
(0,2)
(1,1)
(2,0)
---
k=3;
(1,2)
(2,1)
----
k = 4;
(2,2)


O sea vi que el patrón era que ibas sumándole 1 al numero de filas y restándole al de columnas hasta que en el de columnas llegabas al limite entonces ese lo dejabas fijos en el primer caso y sumabas uno al nº de filas y luego seguías normalmente sumando y restando filas y columnas respectivamente como en el ejemplo.
Y que siempre cumpla que f+c = k.

Uno de los problemas que tenia era que no sabia exactamente donde podría poner la variable f para modificarla.

Aqui lo que tengo, se que esta mal pero vamos aprendiendo  :P

#include <iostream>
#include <vector>
using namespace std;

typedef vector< vector<int> > Ocea;

void llegir_matriu(Ocea& a) {
    int mida = a.size();
    for (int i = 0; i < mida; ++i) {
        for (int j = 0; j < mida; ++j) cin >> a[i][j];
    }
}

void propaga(Ocea& oc, int f) {
    int mida = oc.size();
    int k = 0;
    while (k < mida) {
        int i, j, ai, aj;
        i = j = ai = aj = 0;
        while (i < mida) {
            if (ai+aj == k) {
                oc[ai][aj] = (oc[ai][aj] + f) - (oc[ai][aj]+f)/2;
                if (ai < mida and aj > 0) {
                    ++ai;
                    --aj;
                }
                else {
                    ai = i;
                    aj = j;
                    if (j == mida-1) ++i;
                    else ++j;
                }
            }
        }
        f = (f+oc[ai][aj])/2;
        ++k;
    }
}

void escriu(const Ocea& mines) {
    int mida = mines.size();
    for (int i = 0; i < mida; ++i) {
        cout << mines[i][0];
        for (int j = 1; j < mida; ++j) {
            cout << " " << mines[i][j];
        }
        cout << endl;
    }
}

int main() {
    int m;
    cin >> m;

    for (int k = 0; k < m; ++k) {
        int f, n;
        cin >> f >> n;
        Ocea burra(n, vector<int>(n));
        llegir_matriu(burra);
        propaga(burra, f);
        escriu(burra);
        cout << endl;

    }
}
#12
Intento hacer un programa que resuelva este problema:

http://gyazo.com/971bdf866b6e4882b58503499a8b1376.png


Se que para que un elemento este en la diagonal k (k>= 0 y k < size de la matriz) se tiene que cumplir que f(fila) + c(columna) = k.

Pero me estoy haciendo un lio enorme para poder moverme por la matriz y como tengo que especificar las variables de los whiles/fors que necesito  :huh:

¿Alguna idea de como implementar los fors o whiles? Gracias
#13
Bueno creo que aun no he llegado a usar esas cosas. :P De momento solo he usado concatenación, acceder a una posición del string... vamos lo simple  :laugh:
#14
Una última duda tonta. He estado haciendo unos cuenta programas en c++ utilizando strings(no se me había ocurrido utilizarlos para este problema  :P) pero en ninguno he utilizado la librería #include <string> y los programas me funcionaban correctamente. ¿Cuando tengo que incluirla?
#15
Muchas gracias, no sabia que se podría hacer eso del While(true)   :laugh:  y sobre mi código inicializaba esa variable a 1 era para tener un equivalente al while(true) que me has indicado, es decir, "mientras pueda escribir la primera posición del vector([0]) empieza el bucle"  y como ya tenia leída esta posición empezaba el for con el 1.
Ahora me funciona todo correctamente  :xD Muchas gracias
#16
Cita de: ivancea96 en 15 Diciembre 2013, 21:39 PM
En la imagen, no me explicas nada. Son 1 o 2 entradas diferentes?

Has probado a poner cout << endl << endl;? Quizás es lo que buscas.



PD:Se dice linea, no linia. Por favor, revisa lo que escribiste antes de postear, tienes muchas faltas. Usa signos de puntuación por favor.

Pueden entrar tantas entradas como el usuario quiera. Osea cada vez que entre un diccionario, el vector con los 26 caracteres  le seguirá el numero de lineas y luego cada linea con el texto a traducir. Luego de traducirlas se puede ingresar otro diccionario y continuar el proceso. Si ya no se quieren ingresar más diccionarios se interrumpe el programa.

Acabo de probar lo del doble endl pero sigue sin funcionar, lo que me acabo de dar cuenta es que nunca pasa de la primera linea que tiene que traducir, es decir, nunca sale del while, se queda esperando por eso que no me funcionaban los couts. ¿Alguna idea de como podría hacer para poner la condición para decirle que ya ha acabado una linea y que debe recibir la siguiente?
#17
Nadie?  :huh:
#18
Bueno antes de todo decir que soy bastante nuevo en esto de la programación pero me esta gustando  ;D

Y sobre el problema, lo que quiero hacer es un pequeño y simple programa de criptografia en el que la entrada seria consistiria en una secuencia de casos separada con una linia en blanco:
Cada caso tendria 3 partes:

· Una linia con una traducción de 26 caracteres diferentes seguidos (todos diferentes de ' ' y '_' ). Que corresponderian a 'a', 'b' ... 'z'.
· Un natural positivo  n en una linia
·  n linias de texto criptografiado.

Ya tengo hecha la esencia del problema que es que te lo traduzca correctamente, el problema lo tengo en el formato de las salidas me salen todas pegadas. He intentado poner couts << endl; pero para que no me los leyera  :huh:

Una imagen con los formatos de entrada/salida:
http://gyazo.com/7fe40419fa513770e86aba884d0089cb.png

Y mi codigo:
http://pastebin.com/yf02Z7tN

PD: Soy nuevo en el foro por lo que si he hecho algo mal, avisadmelo  :)