Dev - C++ - coordenadas

 
Vista:

coordenadas

Publicado por Javier (10 intervenciones) el 27/10/2020 11:07:47
buenas!! necesito ayuda con este programa...

Haga un programa que lea una secuencia de caracteres, cada uno codificando un movimiento ( 'n' por norte, 's' para sur, 'e' por este, y 'o' por oeste), y que calcule la posición final de un objeto que inicialmente se encontrara en la posición (0, 0). Suponga que la primera componente se corresponde a la dirección este-oeste, que ir hacia el este significa sumar 1 a esta componente, y que ir hacia el sur significa sumar 1 a la segunda componente.

La entrada consiste en una secuencia de caracteres 'n', 's', 'y', o bien 'o'.

Hay que escribir la posición final de un objeto que inicialmente se encontrara en la posición (0, 0).

De momento llevo esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
int main() {
 
    char x = 'z';
 
        int c = 0;
        int d = 0;
        int e = 0;
        int f = 0;
 
    while (x != '.') {
 
        cin >> x;
 
        if (x == 'n') {
            c = c - 1;
        }
 
        if (x == 's') {
            d = d + 1;
        }
 
        if (x == 'o') {
            e = e - 1;
        }
 
        if (x == 'e') {
            f = f + 1;
        }
 
    }
     cout << "(" << e + f << "," << " " << c + d << ")" << endl;
}

El problema que tengo es que necesito que el programa me lo calcule sin tener que poner un . pero nose como modificarlo porque he probado varias cosas y no han funcionado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

coordenadas

Publicado por Nacho (181 intervenciones) el 27/10/2020 15:04:02
¿Así?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
#include<Windows.h>
using namespace std;
 
int main() {
 
    char x = 'z';
 
    int c = 0;
    int d = 0;
    int e = 0;
    int f = 0;
    cout << "\r\n";
    while (x != '.') {
 
        cin >> x;
 
        if (x == 'n') {
            c = c - 1;
        }
 
        if (x == 's') {
            d = d + 1;
        }
 
        if (x == 'o') {
            e = e - 1;
        }
 
        if (x == 'e') {
            f = f + 1;
        }
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), COORD{ 0,0 });
        cout << "(" << e + f << "," << " " << c + d << ")" << endl;
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

coordenadas

Publicado por Rodrigo (539 intervenciones) el 27/10/2020 16:07:44
Sugiero usar solo 2 variables para controlar la posicion, una para la direccion n-s y la otra para la posicion e-o.
Si es 'n' se le suma (o resta) a esa variable, si es 's' se le aplica lo contrario a la misma variable.
Misma logica para la otra direccion, con la otra variable.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

coordenadas

Publicado por Javier (10 intervenciones) el 27/10/2020 18:12:00
No acabo de entender como lo haría
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

coordenadas

Publicado por Javier (10 intervenciones) el 27/10/2020 18:11:30
Ahora lo que me falla es que cada vuelta que da el while me da el resultado, y me piden que en el output solo salga el resultado final. Además me dicen que el programa tarda demasiado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

coordenadas

Publicado por Nacho (181 intervenciones) el 27/10/2020 20:20:15
Tal y como está el programa sólo hay dos posibilidades: o pone el resultado cuando sale del while, cuando pones un ., o lo pone en cada vuelta. Yo no veo más posibilidades. Como lo tenías tú salia al poner el . y como lo tengo yo, en cada vuelta.

Si tarda mucho cambia de compilador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

coordenadas

Publicado por Javier (10 intervenciones) el 28/10/2020 12:20:03
Pues así como me lo piden en teoría se debería poder, talvez utilizando otro método... y no puedo cambiar de compilador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

coordenadas

Publicado por Rodrigo (539 intervenciones) el 28/10/2020 16:05:50
x solo puede ser 1 de los valores, no puede ser todos por lo que preguntar 4 veces podria optimizarse:
por "else" entre medio de los ifs, para que en el peor de los casos se hagan 4 comparaciones y en general, menos.

El cout final ponlo fuera del ciclo, como lo tenias originalmente.

No es necesario 4 variables para la posicion, basta con 2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar