¿Alguien me ayuda con C++?

Buenas lo primero es que este hilo no se si va aquí, si no por favor pido que lo muevan.

Bien, estoy en 1º de ITIS, y nos han mandando una relación de 10 ejercicios para el exámen práctico, hace poco que he empezado, y ya me he encontrado con el primer problema =/ a ver si me podéis ayudar, que llevo un día dandole vueltas y nada. Este problema consiste en las puntuaciones de un partido de baloncesto, con 3 jugadores cada uno, el menu que tiene que salir es, introduce dorsal (con un filtro de entrada de datos, puse que sólo aceptara dorsales entre 1 y 6) y después la puntuación, y cuando introduzcas la puntuación -1, el programa finalice y diga quien ha ganado o si han empatado, ya he finalizado casi todo, mi problema es:

Cuando introduzco un dorsal correcto, y después la puntuación, al darle a enter, me sigue pidiendo puntuación, yo lo que quiero es que después de introducir dorsal y puntuación me vuelva a pedir dorsal.

Y otro problema es que al introducir -1 no finaliza el programa, lo he hecho con un do while (puntos1 != -1 || puntos2 != -1), pero este problema lo intentaré solucionar más adelante, me urge más el problema del dorsal.

Perdonad el tocho y muchísimas gracias.
Chico, si no pones tu codigo....... xD

Lo de la condicion de salir... asi a ojo, parece que necesitas un &&, no un ||.
De lo contrario, requeriras que tantos puntos1 como puntos2, sean ambos -1, para que deje de cumplir la condicion.
Voy a poner el código, espero que nadie de mi grupo de prácticas lo vea, porque como vean dos programas parecidos en las prácticas nos suspenden xD, ahí va:
#include <iostream>

using namespace std;

int main(){
    int dorsal, puntos1=0, puntos2=0;
    do{
cout << "Introduce el dorsal: " << endl;
cin >> dorsal;
}while(dorsal <= 0 || dorsal > 6);
do{
if(dorsal == 1 || dorsal == 2 || dorsal == 3){
cout << "Introduce la puntuacion: " << endl;
cin >> puntos1;
}
else{
cout << "Introduce la puntuacion: " << endl;
cin >> puntos2;
}
}while(puntos1 != -1 || puntos2 != -1);
if(puntos1 > puntos2){
           cout << "Ha ganado el Equipo 1" << endl;
           }
           else if(puntos1 < puntos2){
           cout << "Ha ganado el Equipo 2" << endl;
           }
                else
                cout << "Los dos equipos han empatado" << endl;
system("pause");
}
Te importaria si lo escribo yo desde cero? porque me he liado hasta leyendolo,ponle comentarios y será lo mejor xD! :D
Hola compañero!! jeje Con la picha hecha un lío, eh? Tranquilo, que yo también pasé por ahí al principio pero cuando acabas ITIS verás como estás hecho un crack ;) (te lo digo por experiencia :P)

Bueno, pues te recomiendo que te acostumbres desde YA a tabular tu código para que quede limpito y aseado... porque sino pasará lo que te dice joseletonix: que no lo entiende ni su autor!!

En cuanto a tu principal problema, si quieres que vuelva a preguntarte por el dorsal lo que tienes que hacer es no salirte del bucle principal... A continuación te muestro tu código adaptado para que funcione como tu quieres, aunque ya te digo que no es la mejor forma de hacer las cosas:

#include <iostream>

using namespace std;

int main()
{
  int dorsal, puntos1=0, puntos2=0;
       
  do
  {
    do
    {
      cout << "Introduce el dorsal: " << endl;
      cin >> dorsal;
    }while(dorsal <= 0 || dorsal > 6);

    if(dorsal == 1 || dorsal == 2 || dorsal == 3)
    {
       cout << "Introduce la puntuacion: " << endl;
       cin >> puntos1;
    }
    else
    {
       cout << "Introduce la puntuacion: " << endl;
       cin >> puntos2;
    }
  }while(puntos1 != -1 && puntos2 != -1);

  if(puntos1 > puntos2)
  {
    cout << "Ha ganado el Equipo 1" << endl;
  }
  else if(puntos1 < puntos2)
  {
    cout << "Ha ganado el Equipo 2" << endl;
  }
  else cout << "Los dos equipos han empatado" << endl;

  system("pause");
}


Fíjate que el tu segundo problema tiene que ver con la condición del bucle (tal y como te decía JanKusanagi): en lugar de || te hace falta &&.

Ya te digo que lo único que he hecho ha sido adaptar tu código para que funcione como pedías, pero imagino que lo que te están pidiendo no es esto, porque al no sumar los puntos y tal, el programa no tiene mucho sentido...

De todas formas no he tenido tiempo de probarlo, pero vamos, a simple vista tiene toda la pinta de que funcione como tu quieres.

Ya nos cuentas ;)
Bueno,te lo estaba escrbiendo desde cero cuando mi compañero kazamax te ha corregido el error,de todas formas,ese programa aun lo sigo viendo como un lio, te lo digo por experiencia,pon comentarios que te vendrán muy bien a la hora de revisar errores y hacer nuevas versiones.Y tampoco te vendría mal cambiar la condición para acabar el programa esa de -1, seria mejor hacer un switch para salir con (S/N) cada unos cuantos dorsales y puntuaciones introducidos :D. Tampoco vendría mal introducir el nombre de los dos equipos mediante una cadena de caracteres if(strcmp(variable"NOMBRE"),no sería necesario pero queda bastante bien y mejoraría el programa :D y tampoco sería imprescindible pero estaría bien un cambio de fondo y de color,para aspecto visual y cuando se acabase el programa,una opción que te pregunte si deseas volver a empezar de nuevo o salir :D.Si tengo tiempo,te escribo el codigo un día de estos y te lo mando para que veas como se puede completar un programa bien ^^,lo que pasa esque ultimamente ando muy liado estudiando 4 de la eso xDD! :D

Saludos de un chaval de 15 años,que su meta...es ser programador :D

Cuidaos ^^
Muchas gracias a los dos, la verdad es que esta tarde he seguido peleandome y al menos yo sólo he podido hacer que cuando introduzca la puntuación me pida de nuevo el dorsal.

Por cierto es verdad que estaba muy guarro el código xD, antes lo he vuelto a hacer separando la puntuación de cada jugador con if, y me ha quedado más limpio, pero es demasiado largo, por cierto joseletonix, en la relación de problemas nos pide expresamente que el programa se termine con una puntuación -1.

Me sigo encontrando con un problema, si introduzco dorsal 1, puntos 1, y dorsal 4 puntos 1, y despues otro dorsal y puntuacion -1 no me dice que han empatado =/.

Ya me enseñarás joseletonix eso de dejarlo más bonito :p

Lo dicho muchas gracias kazamax y joseletonix (seguro que metodología de la programación te la pasas por la piedra cuando llegues a la carrera xD)

EDITO: Bien otra cosa que no sé es si cada vez que meto un dato en una variable, se suma o lo sustituye, cómo puedo hacer para que la puntuación se vaya sumando dentro de la misma variable?
No se si ya me tendría que meter en funciones void y &puntos1 y cosas de estas [+risas]
Bueno pues...un poco raro eso de acabar un programa introduciendo una puntuación de -1 xD!

Respecto a lo del aspecto visual es una tonteria pero se soluciona con un simple system("COLOR F0") (por ejemplo F0 puede variar) :D

Y además de que quede limpio el codigo,acuerdate de comentarlo,que siempre te va a venir muy bien :D

Respecto a lo de la metodología de programación cuando acabas la carrera...no tengo ni idea porque ni siquiera la he empezado xDD! :D

Pero bueno,mucha suerte con la ingenieria de sistemas (que creo que es lo que haces) y siempre que necesites ayuda,estaremos aquí para lo que necesites ^^


EDIT: No había leido tu edit, pero cada vez que le introduces un dato nuevo a una variable,no se suma,ni se resta,ni se multiplica,sino que se cambia el valor,por ejemplo si tú declaras una variable x=10; y luego por medio de otras sentencias como un if o cualquier otra le das otro valor, pasa de x=10 al valor que se le haya dado,por ejemplo x=5;

Y no creo que te tengas que pasar a void,ni llamadas de funciones ni todo el royo,con la función main sobra para ese programa,eso si,si luego quieres añadirle mas opciones en un menú te aconsejo que uses más funciones,porque será más facil de hacerlo,el problema esque luego será más difícil de entender si estás empezando a programar....

Muchísima suerte! (Y) :D
Ok gracias de nuevo joseletonix. Entonces mi problema está ahí:

¿Cómo sumo datos dentro de una misma variable?

EDIT: Creo que estoy muy cerca de dar con la clave, luego edito si me sale bien.
Dentro de una misma variable? eso sería con arrays,pero creo que no los has usado aún, yo desgraciadamente si,pero no me guió muy bien con ellos todavía...

Lo mejor sería declarar otra variable con la suma que tu necesitas.Simplemente crea la variable y dale defínela.
Por ejemplo:

Resultado = Variable1 + Variable2;

Y luego esa variable Resultado la imprimes en pantalla,que supongo que es lo que quieres ^^
Joer mira que soy torpe, me he dado cuenta que el programa finaliza cuando introduces el dorsal -1, no la puntuación -1, pero como antes definí un filtro de entrada para los dorsales, ahora cuando introduzco el dorsal -1, me vuelve a pedir dorsal, no finaliza.

PD: Lo de la suma en la misma variable creo que ya lo he resuelto.

PD2: SIIIII lo conseguí, tan sólo tenía que poner un break si el dorsal == -1 para que se saliera del bucle, y no he tenido que quitar el filtro, tan sólo añadir una excepción para el -1, pues lo dicho, muchas gracias, y posiblemente dentro de unos días os escriba dudas de otros ejercicios.
Xtreme00 escribió:¿Cómo sumo datos dentro de una misma variable?


Yo no entiendo mucho, pero... no empezando con (en pseudocodigo un poco cutre):

resultado1 = 0
puntos del jugador = puntos1
resultado1 = resultado1 + puntos1

Yas metiendo los datos de un jugador tras otro con puntos 1 y sumandoselos al resultado1.

Espero que sea de ayuda, estaba aprendiendo C y C++, más o menos simultaneamente, pero he tenido que parar un poco.
Achiss escribió:
Xtreme00 escribió:¿Cómo sumo datos dentro de una misma variable?


Yo no entiendo mucho, pero... no empezando con (en pseudocodigo un poco cutre):

resultado1 = 0
puntos del jugador = puntos1
resultado1 = resultado1 + puntos1

Yas metiendo los datos de un jugador tras otro con puntos 1 y sumandoselos al resultado1.

Espero que sea de ayuda, estaba aprendiendo C y C++, más o menos simultaneamente, pero he tenido que parar un poco.


Gracias por la colaboración, así lo hice finalmente mirando un poco los apuntes, de todas maneras si lees el post de arriba verás que ya lo he solucionado XD
Te estoy escribiendo el código desde cero,lo estoy intentando hacer rápido pero son muchas lineas de código, yo te lo paso y tu intentas mejorarlo ^^ hasta el momento mi Pc lo corre perfecto :D
joseletonix escribió:Te estoy escribiendo el código desde cero,lo estoy intentando hacer rápido pero son muchas lineas de código, yo te lo paso y tu intentas mejorarlo ^^ hasta el momento mi Pc lo corre perfecto :D


ey ey, joseletonix, has leido mi PD2 del primer mensaje de esta página?

PD2: SIIIII lo conseguí, tan sólo tenía que poner un break si el dorsal == -1 para que se saliera del bucle, y no he tenido que quitar el filtro, tan sólo añadir una excepción para el -1, pues lo dicho, muchas gracias, y posiblemente dentro de unos días os escriba dudas de otros ejercicios.

No hace falta que lo hagas, muchas gracias igualmente, ya te preguntaré mas dudas la semana que viene seguramente, espero que no te importe :)
Jaja enhorabuena,claro que no me importa,siempre que pueda ayudarte :D

te paso el programa que te he hecho por m.p, ya lo he acabado y funciona perfecto, si quieres puedes cambiar partes del diseño,pero es un código bastante largo y con muchas variables, porque no he tenido tiempo de pararme a pensar como hacerlo mas liviano :D
Yo si quereis mañana os posteo uno también [+risas]. No habia visto la PD antes.

(Tengo que ir pasado a renovar los libros que tengo de la biblioteca sobre esto (que no se me =olvide)

Un Hilo Oficial de C/C++ no estaría mal para estas cosas :p
joseletonix escribió:Jaja enhorabuena,claro que no me importa,siempre que pueda ayudarte :D

te paso el programa que te he hecho por m.p, ya lo he acabado y funciona perfecto, si quieres puedes cambiar partes del diseño,pero es un código bastante largo y con muchas variables, porque no he tenido tiempo de pararme a pensar como hacerlo mas liviano :D


Ok, muchísimas gracias, así veré las diferentes maneras de hacerlo.

Saludos :)

EDIT: Jeje Achiss da igual no te molestes, yo creo que ya tengo suficiente, gracias de todas maneras, y la verdad es que sí, un Hilo Oficial de C++ no estaría nada mal.
Ola no sabia donde ponerlo esk teng k acer un ejrcicio de clase y realmte me gustari k me ayudarais es el 1º año k doy programacion ye sty un poko perdida me seria de gran ayuda k alguien me aydara kn estos ejrcicios:
Realiza un programa en ANSI C consistente en un juego en el que dos jugadores
colocarán palabras sobre un tablero. La longitud del tablero podrá tener un tamaño
fijo (10x10), o 10 columnas y un número variable de filas, cuyo valor se introducirá
por teclado.
Inicialmente el tablero estará vacío, que se indicará representando cada casilla por el
carácter ‘-‘. El jugador nº 1 colocará una palabra en el tablero indicando la palabra,
las coordenadas de la casilla donde se colocará la primera letra de la palabra y la
dirección de la palabra, que será horizontal, vertical o diagonal. Por ejemplo, si el
tablero tiene tamaño 10x10 y se introduce la palabra “casa”, con coordenadas (1,2) y
dirección horizontal, el tablero quedaría:
- c a s a - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
A continuación, el jugador nº 2 colocará la segunda palabra. La colocación de la
segunda y las siguientes palabras en el tablero deberá cumplir las siguientes normas:
1. Al menos una letra de la nueva palabra debe situarse en una casilla que
ya tenga una letra en el tablero.
2. Al menos se debe colocar una nueva letra en una casilla vacía del tablero.
3. Si una letra de la nueva palabra se sitúa en una casilla que tiene una letra
distinta, la palabra se rechazará.
Por ejemplo, a partir del tablero con la palabra “casa”, si se introdujera como
segunda palabra “perro”, con coordenadas (1,2) y dirección vertical, no se cumpliría
la regla nº 3, debido que en la casilla con coordenadas (1,2) no se puede colocar la
letra ‘p’ porque ya tiene la letra ‘c’. Si se colocara la palabra “perro”, con
coordenadas (2,2) y dirección horizontal, no se cumpliría la regla nº 1. Si se
colocara la palabra “asa” con coordenadas (1,3) y dirección horizontal, no se
cumpliría la regla nº 2.
Si se introduce una palabra que no cumple alguna de las reglas, se contabilizará el
fallo y se solicitará una nueva palabra. Si el segundo jugador introdujera la palabra
“asa”, con coordenadas (1,3) y dirección diagonal, la palabra cumpliría las tres
reglas y el tablero quedaría:
- c a s a - - - - -
- - - s - - - - - -
- - - - a - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - -
Tras cada introducción de una nueva palabra correcta en el tablero, se visualizará
éste y se solicitará al otro jugador una nueva palabra. Todas las palabras
introducidas deberán caber íntegramente en el tablero. La partida finalizará cuando
el tablero se haya completado, es decir, que tenga todas las casillas con letras, o
cuando el número de fallos de un jugador sea mayor de dos.
Las palabras introducidas no deberán contener acentos ortográficos ni la letra ‘ñ’.


Este es el ejercicio sia lguien me kiere ayudar y tene tiempo aki os dejo mi correo contestarme a el :
lucia_70690@hotmail.com

Muxas gracias
lucia_70690 escribió:Ola no sabia donde ponerlo esk teng k acer un ejrcicio de clase y realmte me gustari k me ayudarais es el 1º año k doy programacion ye sty un poko perdida me seria de gran ayuda k alguien me aydara kn estos ejrcicios:
...
<copy_paste_del_ejercicio />
...
Este es el ejercicio sia lguien me kiere ayudar y tene tiempo aki os dejo mi correo contestarme a el :
lucia_70690@hotmail.com

Muxas gracias


Si vinieras con una duda acerca de un punto en especifico en tu codigo en el que tengas problemas posiblemente obtengas más ayuda que posteando el ejercicio y esperando a que alguien más responda con la solución y/o te lo envien a tu correo ¬_¬ . Como punto de arranque te recomiendo que leas acerca de como usar vectores bidimensionales (crearlos, recorrerlos, escribir y leer los datos de el) y analizes el problema para que veas como entran en contraste el "tablero" y un vector bidimensional de X*Y.
Yo te ayudaría,y esta noche si tengo un poco de tiempo me pondré a hacer tu código pero... acabo de empezar a programar, y no tengo un nivel tan alto xD! ^^

Suerte con tu programa :D
joseletonix escribió:Yo te ayudaría,y esta noche si tengo un poco de tiempo me pondré a hacer tu código pero... acabo de empezar a programar, y no tengo un nivel tan alto xD! ^^

Suerte con tu programa :D


Esto es lo que le gustaría, una alma cándida que le hiciera SU trabajo. Una cosa es ayudar a depurar un programa, la otra pedir que se lo hagan de cero... Que mire en el rincón del vago...
GreatXavi escribió:
joseletonix escribió:Yo te ayudaría,y esta noche si tengo un poco de tiempo me pondré a hacer tu código pero... acabo de empezar a programar, y no tengo un nivel tan alto xD! ^^

Suerte con tu programa :D


Esto es lo que le gustaría, una alma cándida que le hiciera SU trabajo. Una cosa es ayudar a depurar un programa, la otra pedir que se lo hagan de cero... Que mire en el rincón del vago...



Xavi,no es por hacerselo, es porque así práctico yo también, necesito coger habilidad con C++ para cuando empieze la carrera, y aunque tenga 15 años aun, me quiero preparar bien y trabajar todo lo posible, por eso, para mi no es ningun esfuerzo ponerme a hacer algun codigo, al revés, es mi pasión ^^
joseletonix escribió:
GreatXavi escribió:
joseletonix escribió:Yo te ayudaría,y esta noche si tengo un poco de tiempo me pondré a hacer tu código pero... acabo de empezar a programar, y no tengo un nivel tan alto xD! ^^

Suerte con tu programa :D


Esto es lo que le gustaría, una alma cándida que le hiciera SU trabajo. Una cosa es ayudar a depurar un programa, la otra pedir que se lo hagan de cero... Que mire en el rincón del vago...



Xavi,no es por hacerselo, es porque así práctico yo también, necesito coger habilidad con C++ para cuando empieze la carrera, y aunque tenga 15 años aun, me quiero preparar bien y trabajar todo lo posible, por eso, para mi no es ningun esfuerzo ponerme a hacer algun codigo, al revés, es mi pasión ^^


Pues planteatelo como un ejercicio para ti. Pero mira el OT, pide ayuda y cuando se le pide que ponga el código lo hace. Hay un esfuerzo por su parte. El otro se limita a un C&P del enunciado y a esperar sentado. Lo siento, tu tienes 15 años y lo ves como un desafío, pero yo con 43 lo veo de manera muy distinta...
Pues sería buenísimo que joseletonix le hiciera el ejercicio en C++ a la "chica" esta... xDDD

Saludos:).
Bueno Xavi,cada persona tiene su forma de ver las cosas :D.Yo tengo la mia y respeto tu opinión al igual que espero que respetes la mia ^^.De todas formas tengo la semana llena de examenes y no podré hacer mucha cosa V_V.
Hola, tengo casi completo otro ejercicio me falta una cosilla:

¿Cómo comparo tres variables para sacar por pantalla el más grande? Es decir, con dos variables sí sé:

if(resultado1 > resultado2)
    cout << "Resultado 1 es mayor" << endl;
else
    cout << "Resultado 2 es mayor" << endl;


¿Cómo lo hago con tres?

Muchas Gracias
Xtreme00 escribió:Hola, tengo casi completo otro ejercicio me falta una cosilla:

¿Cómo comparo tres variables para sacar por pantalla el más grande? Es decir, con dos variables sí sé:

if(resultado1 > resultado2)
    cout << "Resultado 1 es mayor" << endl;
else
    cout << "Resultado 2 es mayor" << endl;


¿Cómo lo hago con tres?

Muchas Gracias


Pues para comparar 3 variables, puedes hacer un condicional ternario (que ahora no me acuerdo como eran)
O hacer más de 1 condicional,quedaría así:

if(resultado1 > resultado2 && resultado1 > resultado3)
{
     cout <<"Mayor 1" <<endl;
}
if(resultado2 > resultado1 && resultado2 > resultado3)
{
     cout <<"Mayor 2" <<endl;
}
if(resultado3 > resultado2 && resultado3 > resultado1)
{
     cout <<"Mayor 3" <<endl;
}
if(resultado 1 == resultado 2 && resultado1 == resultado3)
{
     cout <<"Los 3 son iguales" <<endl;
}


El código sin optimizar quedaría mas o menos así.para que te hagas una idea :D.
Perdon si lo que te he respondido no es lo que querias pero esque me iva a ir a dormir que mañana tengo que madrugar y no estoy muy centrado :D

Buenas noches! ^^
Xtreme00 escribió:Hola, tengo casi completo otro ejercicio me falta una cosilla:

¿Cómo comparo tres variables para sacar por pantalla el más grande? Es decir, con dos variables sí sé:

if(resultado1 > resultado2)
    cout << "Resultado 1 es mayor" << endl;
else
    cout << "Resultado 2 es mayor" << endl;


¿Cómo lo hago con tres?

Muchas Gracias


El problema que estas teniendo no es uno de programación sino de lógica. Viéndolo por el lado mas sencillo puedes seguir usando el método con el cual si sabes, osea usando dos variables. Si te poner a ver, incluso en el cerebro humano si te ponen una serie de números para ver cual es el mayor generalmente tomas el mayor de los primeros números y luego vas comparando con los demás, si encuentras uno mayor pues descartas el anterior y sigues buscando entre los siguientes de uno en uno (usando dos variables como analogia).

if(resultado1 > resultado2)
    if(resultado1 > resultado3)
        cout << "Resultado 1 es mayor" << endl;
    else
        cout << "Resultado 3 es mayor" << endl;
else
    if(resultado2 > resultado3)
        cout << "Resultado 2 es mayor" << endl;
    else
        cout << "Resultado 3 es mayor" << endl;


Aunque si lo analizas mas detenidamente verás que este método se vuelve cada vez mas problemático al ir incrementando el número de variables, ya queda de tu parte interpretarlo de otra manera y usar otras herramientas del lenguaje *cough*bucles*cough* para obtener un mejor codigo.
(mensaje borrado)
Ok, muchas gracias, luego cuando venga de las prácticas lo miro.

Saludos.
Hola a todos, estaba pensando en hacer un hilo y que lo usemos como "hilo oficial" para dudas como ésta, pero por no meter la pata o por no saber si la gente querría hacerlo lo pongo aquí. Yo también ando ya liado con las prácticas de C++, en diciembre tengo un examen práctico, tenemos los ejercicios y tenemos que hacerlos en casa y ya en el examen tenemos una hora y tendremos que hacer uno de los ejercicios propuestos.

Acabo de terminar el primer ejercicio, pero no termina de salirme cosas como tendrían que salir y no encuentro exactamente muy bien el fallo, así que como último recurso voy a pedir vuestra ayuda para que me echeis el cable... seguramente con los siguientes ejercicios tenga más dudas que si no soy capaz de resolver postearé por eso pensé en lo del "hilo oficial" si la gente esta de acuerdo pues lo creo, o que lo crea alguien que guste no tengo problemas.

Bien el ejercicio propuesto es el siguiente:

1. [calendario] Escribir un programa en C++ que pida al usuario una fecha (día, mes, año) y dé como resultado el día de la semana correspondiente a dicha fecha. Datos a tener en cuenta:
- Hay que comprobar que las fechas son válidas.
- Sólo se admitirán fechas a partir del viernes 15 de octubre de 1582, fecha en la que entró en vigor el calendario gregoriano.
- Hay que tener en cuenta los años bisiestos cuya regla es:
"Un año es bisiesto si es divisible por 4, excepto el último de cada siglo (aquel divisible por 100), salvo que éste último sea divisible por 400".
- La sálida será el día de la semana, en mayúsculas y sin acentos, si la fecha es correcta o "FECHA NO VALIDA" en caso contrario.

Bien, aquí dejo lo que yo tengo terminado (aunque ahora que le echo un vistazo se me ha olvidado poner que si la fecha es anterior del 15 de octubre de 1582 salga lo de "FECHA NO VALIDA"), ahora tengo que salir por lo que no tengo tiempo para dedicarle hasta esta noche que vuelva en la que me pondré un poco (la verdad que esto me "engancha" y si no termino el ejercicio capaz soy de no dormir xD). Bueno aquí dejo esto:

Decir también que he buscado los algoritmos para año bisiesto y para calcular el día, en wikipedia o googleando un poco se encuentra fácil.
#include <iostream>
#include <cmath>

using namespace std;

// Inicio declaración de funciones

//bisiesto?
bool Bisiesto(int ano) {
     return (ano % 4 == 0) && !(ano % 100 == 0 && ano % 400 != 0);
     } 

//febrero?
bool Febrero (int mes) {
     bool febrero = false;
     if (mes == 2)
        febrero = true;
        }

// Programa
int main () {
    int dia, mes, ano, d, modulo_ano, modulo_x, modulo_dia;
       
    cout << "Introduce fecha:" << endl;
    cin >> dia >> mes >> ano;
   
    modulo_ano = (ano - 1) % 7;
    modulo_x = (((ano-1)/4) - 3 * ((((ano-1)/100)+1)/4))%7;
    modulo_dia = dia%7;
   

       
          if (ano >= 1582) {
             if (Bisiesto (ano)) {
                          if (Febrero (mes))
                             if (dia <= 29) {
                                d = (modulo_ano + modulo_x + mes + modulo_dia)%7;
                                switch (d) {                               
                                       case 1:
                                       {cout<<"LUNES"<<endl;}
                                       break;
                                       case 2:
                                       {cout<<"MARTES"<<endl;}
                                       break;
                                       case 3:
                                       {cout<<"MIERCOLES"<<endl;}
                                       break;
                                       case 4:
                                       {cout<<"JUEVES"<<endl;}
                                       break;
                                       case 5:
                                       {cout<<"VIERNES"<<endl;}
                                       break;
                                       case 6:
                                       {cout<<"SABADO"<<endl;}
                                       break;
                                       case 0:
                                       {cout<<"DOMINGO"<<endl;}       
                                       }}
                                   else if (mes < 13)
                                          if (dia <= 31) {
                                              if ((mes==1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 10) || (mes == 12))
                                                  {
                                                    d = (modulo_ano + modulo_x + mes + modulo_dia)%7;
                                                      switch (d) {                               
                                                             case 1:
                                                             {cout<<"LUNES"<<endl;}
                                                             break;
                                                             case 2:
                                                             {cout<<"MARTES"<<endl;}
                                                             break;
                                                             case 3:
                                                             {cout<<"MIERCOLES"<<endl;}
                                                             break;
                                                             case 4:
                                                             {cout<<"JUEVES"<<endl;}
                                                             break;
                                                             case 5:
                                                             {cout<<"VIERNES"<<endl;}
                                                             break;
                                                             case 6:
                                                             {cout<<"SABADO"<<endl;}
                                                             break;
                                                             case 0:
                                                             {cout<<"DOMINGO"<<endl;}       
                                                             }}
                                              else if (dia <= 30) {
                                                      if ((mes==4) || (mes==6) || (mes==9) || (mes==11)) {
                                                                   d = (modulo_ano + modulo_x + mes + modulo_dia)%7;
                                                                     switch (d) {                               
                                                                            case 1:
                                                                            {cout<<"LUNES"<<endl;}
                                                                            break;
                                                                            case 2:
                                                                            {cout<<"MARTES"<<endl;}
                                                                            break;
                                                                            case 3:
                                                                            {cout<<"MIERCOLES"<<endl;}
                                                                            break;
                                                                            case 4:
                                                                            {cout<<"JUEVES"<<endl;}
                                                                            break;
                                                                            case 5:
                                                                            {cout<<"VIERNES"<<endl;}
                                                                            break;
                                                                            case 6:
                                                                            {cout<<"SABADO"<<endl;}
                                                                            break;
                                                                            case 0:
                                                                            {cout<<"DOMINGO"<<endl;}       
                                                                            }}}
                                                   else cout << "FECHA NO VALIDA" << endl;
                                                   }
                                              else cout << "FECHA NO VALIDA" << endl;
                                          else cout << "FECHA NO VALIDA" << endl; }
                                         
                          else if (Febrero (mes))
                             if (dia <= 28) {
                                d = (modulo_ano + modulo_x + mes + modulo_dia)%7;
                                switch (d) {                               
                                       case 1:
                                       {cout<<"LUNES"<<endl;}
                                       break;
                                       case 2:
                                       {cout<<"MARTES"<<endl;}
                                       break;
                                       case 3:
                                       {cout<<"MIERCOLES"<<endl;}
                                       break;
                                       case 4:
                                       {cout<<"JUEVES"<<endl;}
                                       break;
                                       case 5:
                                       {cout<<"VIERNES"<<endl;}
                                       break;
                                       case 6:
                                       {cout<<"SABADO"<<endl;}
                                       break;
                                       case 0:
                                       {cout<<"DOMINGO"<<endl;}       
                                       }}
                                   else if (mes < 13)
                                          if (dia <= 31) {
                                              if ((mes==1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 10) || (mes == 12))
                                                  {
                                                    d = (modulo_ano + modulo_x + mes + modulo_dia)%7;
                                                      switch (d) {                               
                                                             case 1:
                                                             {cout<<"LUNES"<<endl;}
                                                             break;
                                                             case 2:
                                                             {cout<<"MARTES"<<endl;}
                                                             break;
                                                             case 3:
                                                             {cout<<"MIERCOLES"<<endl;}
                                                             break;
                                                             case 4:
                                                             {cout<<"JUEVES"<<endl;}
                                                             break;
                                                             case 5:
                                                             {cout<<"VIERNES"<<endl;}
                                                             break;
                                                             case 6:
                                                             {cout<<"SABADO"<<endl;}
                                                             break;
                                                             case 0:
                                                             {cout<<"DOMINGO"<<endl;}       
                                                             }}
                                              else if (dia <= 30) {
                                                      if ((mes==4) || (mes==6) || (mes==9) || (mes==11)) {
                                                                   d = (modulo_ano + modulo_x + mes + modulo_dia)%7;
                                                                     switch (d) {                               
                                                                            case 1:
                                                                            {cout<<"LUNES"<<endl;}
                                                                            break;
                                                                            case 2:
                                                                            {cout<<"MARTES"<<endl;}
                                                                            break;
                                                                            case 3:
                                                                            {cout<<"MIERCOLES"<<endl;}
                                                                            break;
                                                                            case 4:
                                                                            {cout<<"JUEVES"<<endl;}
                                                                            break;
                                                                            case 5:
                                                                            {cout<<"VIERNES"<<endl;}
                                                                            break;
                                                                            case 6:
                                                                            {cout<<"SABADO"<<endl;}
                                                                            break;
                                                                            case 0:
                                                                            {cout<<"DOMINGO"<<endl;}       
                                                                            }}}
                                                   else cout << "FECHA NO VALIDA" << endl;
                                                   }
                                              else cout << "FECHA NO VALIDA" << endl;
                                          else cout << "FECHA NO VALIDA" << endl; }
                                                                                                 
                                                     
                                                                                                 
                             
             
     
         
                                     
                                             
                                       
                         
                         
                             


    system("pause");
                  }
ReKoN tengo que hacer ese mismo ejercicio también, la semana que viene lo empiezo a ver cómo me sale..

¿Qué os parece si edito el título de este hilo para hacerlo hilo oficial? Le pregunto a los moderadores si eso también..

Saludos.
No estarás en la universidad de granada no?? A ver si vamos a ser compañeros XD
Bueno Rekon, como te habrán dicho, no poner el return, es de mala educación xD! :D pero bueno, a simple vista el programa está bien,luego lo veo mejor,porque tengo un sueño encima quee.... ^^
La verdad es que el tema del return no lo domino muy bien y no se exactamente cuando y por qué he de ponerlo. Probablemente sea lo más simple y yo sea muy torpe :$.

Y tampoco lo hemos usado mucho de momento en los programas que hemos hecho, por no decir nunca prácticamente...

Hoy encima me he enterado de que el examen es la semana que viene (tenia entendido que era para despues del puente), asi que me voy a poner ya a ver si soy capaz de hacer los 10 ejercicios de la relación. Porque sino mal lo veo...
return() define el valor de retorno de una función. Como sabrás main() no deja de ser una función en c, por lo que si lo declaras como int main() están diciendo que la salida de esta función es un entero., por lo tanto al final del main debes indicar cual es la salida de la función. Esto es útil para indicar el estado final de tu programa.

Saludos:).
Muchisimas gracias, ya he encontrado mis fallos y he conseguido que el algoritmo que calcule el dia funciona perfectamente. Solamente me falta hacer que el programa compruebe la fecha, es decir, que si la fecha introducida es anterior al 15-10-1582 me devuelva "FECHA NO VALIDA" y en caso de que la fecha sea posterior pues me ejecute el programa normal. La verdad he hecho varias funciones para que me lo haga pero no me termina de funcionar.

Voy a copiar el codigo tal como lo tengo ahora mismo pero sin que me compruebe si la fecha es posterior al 15-10-1582.

#include <iostream>
#include <cmath>

using namespace std;

// Funciones

bool Bisiesto (int ano) {
     return (ano % 4 == 0) && !(ano % 100 == 0 && ano % 400 != 0);
     }
       


int Modulo (int ano, int mes) {
    int modulo;
    if (Bisiesto (ano)) {
       if ((mes == 1) || (mes == 4) || (mes == 7)) {
          modulo = 0;
          return modulo; }
          else if ((mes == 2) || (mes == 8)) {
                  modulo = 3;
                  return modulo; }
                  else if ((mes == 3) || (mes == 11)) {
                       modulo = 4;
                       return modulo; }
                       else if (mes == 5) {
                            modulo = 2;
                            return modulo; }
                            else if (mes == 6) {
                                 modulo = 5;
                                 return modulo; }
                                 else if ((mes == 9) || (mes == 12)) {
                                      modulo = 6;
                                      return modulo; }
                                      else if (mes == 10) {
                                           modulo = 1;
                                           return modulo; }}
       else if ((mes == 1) || (mes == 10)) {
            modulo = 0;
            return modulo; }
            else if ((mes == 2) || (mes == 3) || (mes == 11)) {
                 modulo = 3;
                 return modulo; }
                 else if ((mes == 4) || (mes == 7)) {
                      modulo = 6;
                      return modulo; }
                      else if (mes == 5) {
                           modulo = 1;
                           return modulo; }
                           else if (mes == 6) {
                                modulo = 4;
                                return modulo; }
                                else if (mes == 8) {
                                     modulo = 2;
                                     return modulo; }
                                     else if ((mes == 9) || (mes == 12)) {
                                          modulo = 5;
                                          return modulo; }}
                                                           
//Programa

int main () {
    int dia, mes, ano, d, modulo1, modulo2, modulo3;
   
    cout << "Introduce fecha:" << endl;
    cin >> dia >> mes >> ano;
   
    modulo1 = (ano - 1) % 7;
    modulo2 = (((ano-1) / 4) - (3 * (((ano - 1)/100)+1)/4)) % 7;
    modulo3 = dia % 7;
   
   
  if ((Bisiesto (ano)) == false)
      if ((mes >= 1) && (mes <= 12)) {
         if ((mes == 1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 10) || (mes == 12))
            if ((dia >= 1) && (dia <= 31)) {
                     d = (modulo1 + modulo2 + modulo3 + Modulo (ano, mes)) % 7;
                     switch (d) {
                            case 0:
                                 cout << "DOMINGO" << endl;
                                 break;
                            case 1:
                                 cout << "LUNES" << endl;
                                 break;
                            case 2:
                                 cout << "MARTES" << endl;
                                 break;
                            case 3:
                                 cout << "MIERCOLES" << endl;
                                 break;
                            case 4:
                                 cout << "JUEVES" << endl;
                                 break;
                            case 5:
                                 cout << "VIERNES" << endl;
                                 break;
                            case 6:
                                 cout << "SABADO" << endl;
                                 break;
                                 }}
            else cout << "FECHA NO VALIDA" << endl;
         else if ((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11))
                 if ((dia >= 1) && (dia <= 30)) {
                          d = (modulo1 + modulo2 + modulo3 + Modulo (ano, mes)) % 7;
                          switch (d) {
                                 case 0:
                                      cout << "DOMINGO" << endl;
                                      break;
                                 case 1:
                                      cout << "LUNES" << endl;
                                      break;
                                 case 2:
                                      cout << "MARTES" << endl;
                                      break;
                                 case 3:
                                      cout << "MIERCOLES" << endl;
                                      break;
                                 case 4:
                                      cout << "JUEVES" << endl;
                                      break;
                                 case 5:
                                      cout << "VIERNES" << endl;
                                      break;
                                 case 6:
                                      cout << "SABADO" << endl;
                                      break;
                                      }}
                 else cout << "FECHA NO VALIDA" << endl;
         else if (mes == 2)
                 if ((dia >= 1) && (dia <= 28)) {
                          d = (modulo1 + modulo2 + modulo3 + Modulo (ano, mes)) % 7;
                          switch (d) {
                                 case 0:
                                      cout << "DOMINGO" << endl;
                                      break;
                                 case 1:
                                      cout << "LUNES" << endl;
                                      break;
                                 case 2:
                                      cout << "MARTES" << endl;
                                      break;
                                 case 3:
                                      cout << "MIERCOLES" << endl;
                                      break;
                                 case 4:
                                      cout << "JUEVES" << endl;
                                      break;
                                 case 5:
                                      cout << "VIERNES" << endl;
                                      break;
                                 case 6:
                                      cout << "SABADO" << endl;
                                      break;
                                      }}
                 else cout << "FECHA NO VALIDA" << endl; }
                 
      if (Bisiesto (ano))
         if ((mes >= 1) && (mes <= 12)) {
                  if ((mes == 1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 10) || (mes == 12))
                     if ((dia >= 1) && (dia <= 31)) {
                              d = (modulo1 + modulo2 + modulo3 + Modulo (ano, mes)) % 7;
                              switch (d) {
                                     case 0:
                                      cout << "DOMINGO" << endl;
                                      break;
                                     case 1:
                                      cout << "LUNES" << endl;
                                      break;
                                     case 2:
                                      cout << "MARTES" << endl;
                                      break;
                                     case 3:
                                      cout << "MIERCOLES" << endl;
                                      break;
                                     case 4:
                                      cout << "JUEVES" << endl;
                                      break;
                                     case 5:
                                      cout << "VIERNES" << endl;
                                      break;
                                     case 6:
                                      cout << "SABADO" << endl;
                                      break;
                                      }}
                     else cout << "FECHA NO VALIDA" << endl;
                  else if ((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11))
                          if ((dia >= 1) && (dia <= 30)) {
                                   d = (modulo1 + modulo2 + modulo3 + Modulo (ano, mes)) % 7;
                                   switch (d) {
                                          case 0:
                                               cout << "DOMINGO" << endl;
                                               break;
                                          case 1:
                                               cout << "LUNES" << endl;
                                               break;
                                          case 2:
                                               cout << "MARTES" << endl;
                                               break;
                                          case 3:
                                               cout << "MIERCOLES" << endl;
                                               break;
                                          case 4:
                                               cout << "JUEVES" << endl;
                                               break;
                                          case 5:
                                               cout << "VIERNES" << endl;
                                               break;
                                          case 6:
                                               cout << "SABADO" << endl;
                                               break;
                                               }}
                          else cout << "FECHA NO VALIDA" << endl;
                  else if (mes == 2)
                          if ((dia >= 1) && (dia <= 29)) {
                                   d = (modulo1 + modulo2 + modulo3 + Modulo (ano, mes)) % 7;
                                   switch (d) {
                                          case 0:
                                               cout << "DOMINGO" << endl;
                                               break;
                                          case 1:
                                               cout << "LUNES" << endl;
                                               break;
                                          case 2:
                                               cout << "MARTES" << endl;
                                               break;
                                          case 3:
                                               cout << "MIERCOLES" << endl;
                                               break;
                                          case 4:
                                               cout << "JUEVES" << endl;
                                               break;
                                          case 5:
                                               cout << "VIERNES" << endl;
                                               break;
                                          case 6:
                                               cout << "SABADO" << endl;
                                               break;
                                               }}
                          else cout << "FECHA NO VALIDA" << endl; }
                         
   system("pause");
}
ReKoN escribió:No estarás en la universidad de granada no?? A ver si vamos a ser compañeros XD


Jajaj, pues si tio, estoy en sistemas en el grupo A, tu también?
No me jodas macho yo tambien xD, que bueno ver a un eoliano en clase, a ver si me dices quien eres o algo o me mandas un mp que lo mismo nos conocemos xDD.

No me copies mucho el codigo que luego da el cante :p . Eso si en los otros 9 ejercicios de momento no tengo cojones de hacer alguno, se como meterle mano a unos cuantos pero no termino de ver como hacerlo funcionar xD.
ReKoN escribió:No me jodas macho yo tambien xD, que bueno ver a un eoliano en clase, a ver si me dices quien eres o algo o me mandas un mp que lo mismo nos conocemos xDD.

No me copies mucho el codigo que luego da el cante :p . Eso si en los otros 9 ejercicios de momento no tengo cojones de hacer alguno, se como meterle mano a unos cuantos pero no termino de ver como hacerlo funcionar xD.


jaja lo siento tio que no he podido conectarme en este tiempo, no te preocupes no lo voy a copiar xD, voy a intentar sacarlo yo solo, mirando por internet a ver, y a ver si mañana hago unos cuantos, que si no no me da tiempo.

Venga saludos!
Buenas, vengo a molestaros de nuevo un poco XD

Estoy haciendo un ejercicio de vectores, el cual se me atraganta (no me manejo mucho todavía), voy a exponer el problema y mis dudas:

Bien, el problema nos dice que un numero real positivo puede representarse en un vector de enteros V (20 elementos) alineados a la derecha, junto a otra variable entera, posDec1, que nos dice la posición de la coma, por ejemplo el numero pi: 3.141592 sería:

0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 4 1 5 9 2
posDec1=14

El programa pide que a partir de dos vectores que le introduzcamos (con sus respectivas posiciones de coma) nos dé el resultado, por ejemplo:

00000000000003141592 posDec1=14 (3.141592)
00000000000000000020 posDec1=19 (2.0)

El resultado sería: 6.283184

Lo que llevo hecho hasta ahora:
#include <iostream>

using namespace std;

void imprimeVector(const int v[], int util_v);
void compruebaResultado(const int v1[], int posDec1, const int v2[], int posDec2, double producto_obtenido, double producto_correcto);

int main(){
    const int LONGITUDMAX = 1000;
    int v1[LONGITUDMAX];
    int v2[LONGITUDMAX];
    int util_v, posDec1, posDec2;
    double producto_obtenido, producto_correcto;
 
           cout << "Introduce el primer vector componente a componente: " << endl;
           for(int i=0; i<20; i++){
                   cin >> v1[i];
                   }
                   
           cout << "Introduce la posicion de la coma: " << endl;
           cin >> posDec1;

           cout << "Introduce el segundo vector componente a componente: " << endl;
           for(int j=0; j<20; j++){
                   cin >> v2[j];
                   }
                   
           cout << "Introduce la posicion de la coma: " << endl;
           cin >> posDec2;
           
           cout << "Ahora introduce el resultado: " << endl;
           cin >> producto_correcto;
           
           int k=0;
           if(v1[k]==0)
           k++;
           
           int l=0;
           if(v2[l]==0)
           l++;
           
           producto_obtenido=v1[k]*v2[l];
                   
           compruebaResultado(v1, posDec1, v2, posDec2, util_v, producto_correcto);
           
           system("pause");
                   
}
/**
@brief Imprime los elementos del vector en salida estándar separados por blancos
@param v un vector de int
@param util_v: el número de elementos usados de v
*/
void imprimeVector (const int v[], int util_v) {
    for (int i=0; i<util_v; i++)
        cout << v[i] <<" ";
}

/**
@brief Comprueba si son correctos los datos obtenidos por el programa
@param v1 el vector con la representacion del primer real
@param posDec1 posicion del punto decimal de v1
@param v2 el vector con la representacion del segundo real
@param posDec2 posicion del punto decimal de v2
@param producto_obtenido producto obtenido
@param producto_correcto producto real
*/
void compruebaResultado(const int v1[], int posDec1,
                        const int v2[], int posDec2,
                        double producto_obtenido,
                        double producto_correcto) {
    cout << "\nEl producto de:\n";
    imprimeVector(v1, 20);

    cout << "\ny:\n";
    imprimeVector(v2, 20);

    cout << "\nEs: " << producto_obtenido << endl;

    if (producto_obtenido == producto_correcto)
        cout << "\n\nCORRECTO" << endl;
    else {
        cout << "\n\n----> NO ES CORRECTO  <----" << endl;
        cout << "Deberia salir: " << producto_correcto << endl;
    }
}
Yo sólo tengo que modificar la función main, lo demás no tengo que tocarlo, hasta que el resultado sea 'CORRECTO'.

Aquí mis dudas:

- ¿Cómo multiplico dos vectores?
- No tengo ni idea de cómo manejarme con la posición de la coma que me dan.

Gracias.
41 respuestas