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

#31
Si le meto 1 2 1 2 0 dice que la montaña más larga mide 3, pero que el valle más largo mide 2. No he analizado el código ya que tengo bastante con el mío, que no se donde narices falla y al final será alguna tontería  :P

El mío con esos valores da justo el resultado contrario :P

Y creo que ninguno de los 2 tiene en cuenta que en 1 2 2 2 3 4 1 2 1 0 tanto la montaña como el valle valen 3 ya que la primera parte no se puede considerar una montaña al tener varios valores repetidos.
#32
Bigfu, tu solución al 5º ejercicio del segundo tema no funciona bien, considera una pendiente ascendente suelta como montaña o valle y las condiciones del problema no lo permiten. Por otro lado en caso de llanura debería ignorar todo el trozo ya que según las condiciones cada número tiene que ser superior o inferior al anterior hasta h y tu código simplemente ignora los repetidos.

Yo he hecho otro código que funciona bien con valles pero no se por qué en en caso de las montañas no suma la parte descendente o algo (la cosa es que siguiendo las instrucciones en un papel funciona... :S). El otro problema es que tampoco tiene en cuenta las llanuras, a ver si los soluciono. De momento lo dejo a ver si ve alguien el fallo:

Código (cpp) [Seleccionar]
/*5.- Decimos que una sucesión a1,a2,...,an de enteros forma una montaña, si existe un h tal que:
1 <= h <= n y además a1<...ah-1 < ah > ah+1 > ...an
Por ejemplo 24, 13, 6, 15, 50 sería un valle.
Dada una secuencia de enteros terminada en cero (0) que como mínimo contiene una montaña y un valle
(suponemos que la secuencia de enteros de entrada es una secuencia correcta de montañas y valles),
diseña un programa que calcule la longitud de la montaña y el valle más largos.
*/

#include <iostream>
#include <Windows.h>
using namespace std;

void cuentasubida(int& num, int& prevNum, int& subida)
{
subida++;
while (prevNum<num && num!=0)
{
subida++;
prevNum=num;
cin >> num;
}
}

void cuentabajada(int& num, int& prevNum, int& bajada)
{
bajada++;
while (prevNum>num && num!=0)
{
bajada++;
prevNum=num;
cin >> num;
}
}

void main ()
{
int num, prevNum, montaña=0, valle=0, subida=0, bajada=0, aux=0;
cout << "Introduce una sucesion de numeros que incluya al menos una montaña y un valle: " << endl;
cin >> num;
while (num != 0)
{
prevNum=num;
cin >> num;
while (num != 0)
{
if (prevNum<num)
{
cuentasubida(num, prevNum, subida);
if(bajada!=0) //Si antes había una bajada tendrá el valor de la parte descendente, en otro caso es el comienzo de un valle incompleto por lo que se salta esta parte
{
aux=(bajada+subida)-1;
bajada=0; //Como el valle está completo borra la parte de la bajada quedando sólo el valor de la última parte ascendente
if(aux>valle)
valle=aux;
}
}
if (num!=0 && prevNum>num)
{
cuentabajada(num, prevNum, bajada);
if(subida=!0) // Igual que antes, si había un valor de subida es que la montaña estaba empezada
{
aux=(subida+bajada)-1;
subida=0; // Dado que la montaña está completa borra la parte ascendente dejando el final descendente
if (aux>montaña)
montaña=aux;
}
}
}
}
cout << "La montaña mas larga es de " << montaña << endl;
cout << "El valle mas largo es de " << valle << endl;
Sleep(5000000); // para el programa para analizar los resultados
}


La verdad, no se lo qué está mal ya que en teoría si no hay números iguales seguidos debería funcionar bien :S
#33
Creo que tengo una solución más sencilla para el 4º ejercicio del tema 2, a ver que os parece:

#include <iostream>
#include <Windows.h>
using namespace std;

void cuenta (int& num, int& cont)
{
int contaux=0;
int numant=0;
while (numant<=num&&num<2)
{
contaux++;
numant=num;
cin >> num;
}

if (contaux>cont)
cont=contaux;
}


void main ()
{
int num;
int cont=0;
cout << "Escribe ceros y unos separados por espacios y con un 2 al final: " << endl;
cin >> num;
while(num<2)
cuenta(num, cont);
cout << "La mayor sucesion ordenada es de: " << cont << endl;
Sleep(50000);
}
#34
Noticias / Re: De los juzgados, al Quake 3.
17 Agosto 2011, 19:27 PM
Ya que lo he traducido para otro foro lo pego aquí:

Citar¡Hey, Bethesda! ¡Vamos a resolver esto!
He vuelto y estoy emocionado.

La boda ha sido maravillosa, y nadie ha saboteado mi ordenador mientras no estaba.

Lo único negativo que me sucede en éste momento es el pleito sin sentido por la marca "Scrolls", y creo que he dado con la solución perfecta:

¿Recordáis la escena de Juego de Tronos donde Tyrion escoge un juicio por combate en "El nido de Águilas"? Pues bien, ¡mejor hagamos eso!
Reto a Bethesda a una partida al Quake 3. Tres de nuestros mejores guerreros contra tres de vuestros mejores guerreros. Nosotros seleccionaremos un nivel, vosotros seleccionaréis el otro y el orden será aleatorio. Las partidas serán de 20 minutos y ganará el equipo que sume más frags en ambos niveles.

Si ganamos, abandonáis el pleito.

Si ganáis, cambiaremos el nombre de Scrolls por otro que no os moleste.

Independientemente del resultado, podríamos seguir teniendo un pequeño texto en algún lugar indicando que nuestro juego no tiene ninguna relación con vuestra franquicia si así lo deseáis.

Por cierto, va en serio.
#35
Cita de: bigfu en 11 Agosto 2011, 18:10 PM
Tanto la estructura while como la do-while son iterativas (bucles), al igual que la estructura for. Asi que puedes hacerlas con la estructura que prefieras, aunque la estructura for se usa más en los casos en los que conoces el número de iteraciones, pero creo que la puedes "transformar" y usarlas como las otras dos.

Había leído mal el enunciado xD, pensaba que el programa tenía que ejecutarse en bucle, no sólo tener un bucle que vaya leyendo caracteres.

PD: He llegado hasta el ejercicio 6, creo que es un método más rápido y sencillo, a ver que os parece (el Sleep está sólo para que de tiempo a ver el resultado, no se si sería necesario pero creo que no entra en el tema del ejercicio):

Citar// 6.- Desarrolla un algoritmo para el siguiente juego:
// El usuario introduce un límite inferior, un límite superior y piensa un número en ese rango.
// El ordenador tiene que acertarlo. Para ello el ordenador propone un número y el usuario responde
// con >, < o = (correspondiente a acertado y el programa acaba). Si la respuesta es > o <, el ordenador
// propondrá otro número hasta que lo acierte.
// (Si mal no recuerdo, para este ejercicio, el profesor indicó que tanto el usuario como el ordenador,
// somos nosotros, sino sería más complicado hacerlo con lo visto hasta ahora XD)

#include <iostream>
using namespace std;
#include <Windows.h>

int main()
{
   int liminf=0, limsup=0, num=0, numsuger=0;
   bool final = false;
   char respuesta;
   cout << "Piense en un número entre un limite inferior y uno superior." << endl;
   cout << "Introduzca el limite inferior y pulse intro: ";
   cin >> liminf;
   cout << "Introduzca el limite superior y pulse intro: ";
   cin >> limsup;
   while (final == false)
   {
      numsuger= (limsup+liminf)/2;
      cout << "El numero es " << numsuger << "?" << endl;
      cout << "Contesta con '=', '<' si es menor o '>' si es mayor y pulsa intro: ";
      cin >> respuesta;
      if (respuesta == '<')
         limsup = numsuger;
      else if (respuesta == '>')
         liminf = numsuger;
      else if (respuesta == '=')
      {
         cout << "Numero adivinado!";
         final = true;
      }
   }
   Sleep(15000);
   return 0;
}
#36
Cita de: bigfu en 11 Agosto 2011, 17:20 PM
¿qué IDE estás usando? Yo lo acabo de comprobar y va bien.
Si al ejecutarlo te sale una ventana tipo MS-DOS, lo que seguramente pase es que se ejecute bien pero se cierra justo al terminar de hacerlo, sin dar tiempo a mostrar el resultado, de ahi que parezca que se cierra de forma inesperada.

Probablemente sea eso, aunque de todas formas en el ejercicio decía de hacer un bucle, habría que añadir un while. Uso el Visual C++ 2010 Express.
#37
Cita de: bigfu en 11 Agosto 2011, 14:21 PM
El código está bien, de esa forma puedes escribir todo lo que quieras sin el problema que te ocurre a ti de los textos muy largos (ya que tu tienes definida una cadena de caracteres de tamaño 200, si te pasas de los 200 te va a dar error).
El tema de las tildes es debido a que C++ toma los caracteres de la tabla ASCII (o eso tengo entendido yo), al igual que con la 'ñ', que tampoco está en la tabla ASCII.

Eso es lo que me ha parecido al leer tu código, lo que pasa es que no conocía esa función, de todas formas he preguntado por que al compilar tu código y ejecutarlo meto texto y cuando pulso intro se cierra.

Lo de las tildes creo que se puede arreglar convirtiendo las cadenas a unicode con una L o algo así pero no se como iba, lo vi en unos tutoriales de OpenGL.
#38
Repe
#39
Ya que estoy aprendiendo a programar me he puesto a hacerlos, pero tengo una pregunta, ¿Seguro que el código del primer ejercicio está bien?

#include <iostream>
using namespace std;

int main() {
char c;
int comas, numChar;

numChar = 0;
comas = 0;

cout << "Introduzca texto terminado en '.': ";
do{
cin.get(c);
numChar++;
if(c==','){
comas++;
}
}while(c!='.');

cout << "Numero de comas: " << comas << endl;
cout << "Numero de caracteres: " << numChar << endl;
return 0;
}


Yo lo he hecho así:

#include <iostream>
using namespace std;

int main ()
{
char texto[200];
bool salir = 0;
bool punto = 0;
int coma = 0;
int n = 0;
char temp = 'n';
while (salir == 0)
{
cout << "Comience a intoducir el texto: ";
cin >> texto;
for ( n = 0 , punto = 0 , coma = 0 ; punto == 0 ; n++ )
{
if (texto[n] == ',' )
coma++;
else if (texto[n] == '.' )
punto =1;
}
cout << "El numero de comas es: " << coma << endl;
cout << "El numero de caracteres leidos es: " << n << endl;
cout << "Introduzca 'S' para salir, cualquier otro caracter para continuar:" << endl;
cin >> temp;
if (temp == 'S' )
salir = 1;
}
return 0;
}


Y más o menos me funciona, excepto si meto acentos o textos muy largos o sin punto.
#40
Saludos a todos, éste es mi primer post por aquí, estoy aprendiendo a programar, pero programar por programar me aburre así que me ha dado por intentar hacer algo útil, y dado que nunca he sido capaz de encontrar un programa que permita manejar el PC con un gamepad ese es mi objetivo, aunque no se muy bien por dónde empezar, se cosas muy básicas en C, es decir, programar cosas sencillas en modo texto, pero quería empezar por hacer un programa que convierta las pulsaciones del pad en pulsaciones del teclado, ¿qué funciones tendría que usar? A ver si me podéis orientar un poco :)