Ayuda con tarea

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
rubensalazar
Mensajes: 7
Registrado: 06/08/2019 3:43 am

Ayuda con tarea

#1 Mensaje por rubensalazar » 06/08/2019 3:58 am

Hola, que tal disculpen soy principiante en c++ y me toco hacer esto, pero al momento de realizarlo siempre me aparece lo mismo, pertenece a la primera edad aun si digito el numero 18 o 17, ¿cual seria mi error?

Código: Seleccionar todo

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

/* Si el niño tiene entre 0 y 6 años el programa debe imprimir
 que el niño pertenece al grupo de la primera infancia.
Si la edad está entre los 6 y los 12 años el programa debe imprimir que el niño 
pertenece al grupo de la segunda infancia;
y en caso de que el niño tenga entre 12 y 18 años el mensaje impreso dirá 
que pertenece al grupo de los adolescentes.*/

int main(){
	int edad;
    cout<< "Bienvenido Usuario, por favor digite su edad aqui:"<<endl;
    cin>>edad;
    
    if(0>=edad<=6){ cout<<"Usted pertenece a el grupo de la primera infancia"<<endl;}else if
	(6>=edad<12){cout<<"Usted pertenece a el grupo de la segunda infancia"<<endl;}
	else if(12>=edad<=18){ cout<<"Usted pertenece a el grupo de los adolescentes"<<endl;}
	else{ cout<<"Por favor digite un numero entre 0 y 18"<<endl;}

	system("pause");
	return 0;
		
}
Adjuntos
Captura.PNG
Captura.PNG (132.05 KiB) Visto 593 veces
Última edición por mollok el 06/08/2019 5:36 am, editado 1 vez en total.
Razón: Los códigos deben ir entre etiquetas 'code', botón </>

dehm
Mensajes: 328
Registrado: 29/04/2011 7:31 am

Re: Ayuda con tarea

#2 Mensaje por dehm » 06/08/2019 4:27 am

Hola:

el problema lo tienes al hacer las comprobaciones:
Esto:

Código: Seleccionar todo

if(0>=edad<=6)
no te va a funcionar

Debería de ser :

Código: Seleccionar todo

if(edad>=0 && edad<6)
Y así con el resto de comparaciones.

Por añadir algo más, ten cuidado con los intervalos.
Si una persona tiene 6 años, no puede o no debe pertenecer a dos grupos. Se supone que de 0 a 5 pertenece a un grupo y de 6 a 12 a otro.
Si quieres que incluya la edad de 6, entonces será:

Código: Seleccionar todo

if(edad>=0 && edad<=6)
Y el siguiente intervalo irá desde edad>6 hasta edad <12 (ó <=12 si incluimos a los de 12 años)

Por hacer otras aclaraciones....no uses cabeceras que no van a ser usadas. En tu ejemplo sobran stdio.h y stdlib.h. Además, si estás en C++ usa la versión propia, que sería cstdio y cstdlib

Y ya por último, deberías obligar a que vuelva a ejecutar la secuencia en caso de que no se meta una edad apropiada (ahora mismo solo muestra un mensaje para que lo haga y luego acaba el flujo del programa)

Saludos! :wink:
Aprendiendo

dariodr01
Mensajes: 35
Registrado: 18/07/2017 1:35 am

Re: Ayuda con tarea

#3 Mensaje por dariodr01 » 06/08/2019 5:36 am

En pseudocodigo sera algo asi:

Código: Seleccionar todo

si (edad >= 0 y edad < 6)
	imprimir('Primera infancia')
sino si (edad >= 6 y edad < 12)
	imprimir('Segunda infancia')
sino si (edad >= 12 y edad <= 18)
	imprimir('Adolescente')
fin-si
Ahora solo pasalo a C++.
Saludos.

rubensalazar
Mensajes: 7
Registrado: 06/08/2019 3:43 am

Re: Ayuda con tarea

#4 Mensaje por rubensalazar » 06/08/2019 4:28 pm

dehm escribió:
06/08/2019 4:27 am
Hola:

el problema lo tienes al hacer las comprobaciones:
Esto:

Código: Seleccionar todo

if(0>=edad<=6)
no te va a funcionar

Debería de ser :

Código: Seleccionar todo

if(edad>=0 && edad<6)
Y así con el resto de comparaciones.

Por añadir algo más, ten cuidado con los intervalos.
Si una persona tiene 6 años, no puede o no debe pertenecer a dos grupos. Se supone que de 0 a 5 pertenece a un grupo y de 6 a 12 a otro.
Si quieres que incluya la edad de 6, entonces será:

Código: Seleccionar todo

if(edad>=0 && edad<=6)
Y el siguiente intervalo irá desde edad>6 hasta edad <12 (ó <=12 si incluimos a los de 12 años)

Por hacer otras aclaraciones....no uses cabeceras que no van a ser usadas. En tu ejemplo sobran stdio.h y stdlib.h. Además, si estás en C++ usa la versión propia, que sería cstdio y cstdlib

Y ya por último, deberías obligar a que vuelva a ejecutar la secuencia en caso de que no se meta una edad apropiada (ahora mismo solo muestra un mensaje para que lo haga y luego acaba el flujo del programa)

Saludos! :wink:
Hola muchas gracias ya lo realize y funciono, a que te refieres con "stdio.h y stdlib.h. Además, si estás en C++ usa la versión propia, que sería cstdio y cstdlib"? los utilizo para system("pause"); y como seria eso de obligcar a que vuelva a ejecutar la secuencia en caso que no se meta una edad apropiada? me gustaria saber :oops:

dehm
Mensajes: 328
Registrado: 29/04/2011 7:31 am

Re: Ayuda con tarea

#5 Mensaje por dehm » 07/08/2019 4:33 am

Hola de nuevo.

Lo que te comentaba de las cabeceras, es porque existen versiones para C y para C++. Casi siempre las versiones para C++ son como la de C, pero empezando por la letra "c" y quitando el ".h"

Así, en C tenemos stdlib.h o stdio.h, y sus equivalentes en C++ son cstdlib o cstdio.

En todo caso, si quieres hacer uso de "system", sólo has de usar cstdlib

Y sobre lo otro, tienes que meter el flujo del programa en un bucle en el que sólo puedas salir de él cuando tengas una respuestas satisfactora, y si no, vuelvas a ejecutarlo.
En un diagrama de flujo sería:

1.- Introduce valor
2.- ¿Es correcto...está en el rango?
3.- Si ->Pasa al punto 5
4.- No->Vuelve al punto 1
5.- Evalúa el dato y salir.

Como ves, si introduzco un valor no válido (en este caso un valor que no esté en el rango 0-18) haremos los pasos 1-2-4-1-2-4-1-2-4....
Y si el valor es bueno, llegaremos al 1-3-5-final

Esto se puede conseguir de varias formas, la más sencilla pienso que es un bucle do/while
La estructura sería
do {introduce valor}
while (valor incorrecto)
De esta forma obligamos a introducir un valor correcto, y hasta que no se consiga no saldremos del bucle.

Código: Seleccionar todo

int main()
{
    //primera parte, introduccion de la edad
    int edad;
    do
    {
        cout<< "Bienvenido Usuario, por favor digite su edad aqui:"<<endl;
        cin>>edad;
    }
    while (edad <0 || edad >18);
    //segunda parte, evaluamos la edad y salimos
    if(edad>=0 && edad<6)
        {
            cout<<"Usted pertenece a el grupo de la primera infancia"<<endl;
        }
        else if (edad>=6 && edad<12)
        {
            cout<<"Usted pertenece a el grupo de la segunda infancia"<<endl;
        }
        else if(edad>=12 && edad<=18)
        {
            cout<<"Usted pertenece a el grupo de los adolescentes"<<endl;
        }
    //system("pause");
    return 0;
}

Otra manera mas similar al código que tienes es que el mismo bucle además de validar el valor, lo evalúe si es correcto y salga del bucle, y si no lo es, lance el mensaje de que vuelva a introducir un valor y vuelta a empezar:

Código: Seleccionar todo

int main()
{
    int edad;
    cout<< "Bienvenido Usuario, por favor digite su edad aqui:"<<endl;
    do
    {
        cin>>edad;

        if(edad>=0 && edad<6)
        {
            cout<<"Usted pertenece a el grupo de la primera infancia"<<endl;
        }
        else if (edad>=6 && edad<12)
        {
            cout<<"Usted pertenece a el grupo de la segunda infancia"<<endl;
        }
        else if(edad>=12 && edad<=18)
        {
            cout<<"Usted pertenece a el grupo de los adolescentes"<<endl;
        }
        else
        {
            cout<<"Por favor digite un numero entre 0 y 18"<<endl;
        }
    }
    while (edad <0 || edad >18);
    //system("pause");
    return 0;
}
Saludos!
Aprendiendo

rubensalazar
Mensajes: 7
Registrado: 06/08/2019 3:43 am

Re: Ayuda con tarea

#6 Mensaje por rubensalazar » 07/08/2019 8:59 am

:D Muchas gracias te lo agradezco¡, ese tema todavia no lo he dado, una pregunta porque pusiste en el while ( edad <0 || edad >18) , no seria while( edad=<0 || edad=<18)?? tambien se podria usar && en ese caso?

dehm
Mensajes: 328
Registrado: 29/04/2011 7:31 am

Re: Ayuda con tarea

#7 Mensaje por dehm » 07/08/2019 11:38 am

rubensalazar escribió:
07/08/2019 8:59 am
:D Muchas gracias te lo agradezco¡, ese tema todavia no lo he dado, una pregunta porque pusiste en el while ( edad <0 || edad >18) , no seria while( edad=<0 || edad=<18)?? tambien se podria usar && en ese caso?
Hola. Bueno, pues ya llegarás a estos bucles ;-)

Respecto a tu pregunta, el operador && es AND y el operador || es OR

Lo primero es que si hago como sugieres:

Código: Seleccionar todo

while( edad=<0 || edad=<18)
Estoy descartando los valores 0 y 18*, además de los menores de 0 y los mayores de 18, y nos interesa que estos valores sí se tengan en cuenta.
*(supongo que querías poner edad>=18), porque la expresión tal y como la has puesto descarta los valores menores o iguales a 0 y menores o iguales a 18, lo que da por válidos solamente a los valores a partir de 19)

Seguimos:
Si la expresión incluye el "menor o igual" debería de ser

Código: Seleccionar todo

while( edad=<-1 || edad>=19)
que es equivalente a

Código: Seleccionar todo

while( edad<0 || edad>18)
Seguimos:
Para que una expresión con AND sea cierta (true), todos los elementos que intervienen en la operación han de serlo.
Para que una expresión con OR sea cierta (true) basta con que una de ellas sea true.

En el caso que nos ocupa

Código: Seleccionar todo

while ( edad <0 || edad >18)
sólo con que una de las dos comparaciones sea cierta, estamos en "true" y volvemos al bucle.
En realidad el ordenador evalúa la primera parte:

Código: Seleccionar todo

edad<0
Si introduzco un valor menor a 0, es suficiente para saber que no se van a cumplir las dos condiciones (la primera ya no se está cumpliendo). No le hace falta más información, y retorna al bucle.
Pero si introduzco un valor >18 evaluará la segunda parte:

Código: Seleccionar todo

edad>18
y también volverá al bucle.
Si ambos valores son falsos (es decir, válidos) el resultado de la evaluación también será falso, y podremos salir del bucle.
En realidad es un poco lioso, porque lo que estamos buscando es que el número sea válido cuando las dos evaluaciones sean falsas.
La tabla de la verdad es:
TRUE || FALSE = TRUE
FALSE || FALSE = FALSE

Luego para un valor de edad = 5, por ejemplo:
5<0 FALSE
5>18 FALSE
Resultado FALSE-->me salgo del bucle

Para un valor de -1
-1<0 TRUE....ya no me hace falta seguir evaluando puesto que como es suficiente con que una de las comparaciones sea TRUE, lo que pase en la otra no va a modificar la conclusión (esto se llama cortocircuito)
Resultado TRUE->Sigo en el bucle

Para un valor de 20
20<0 FALSE
20>18 TRUE
Resultado TRUE->Sigo en el bucle

También sugieres resolver la condición con && (AND)

En este caso buscaríamos el efecto contrario. Supongamos que queramos que pregunte tantas veces la edad hasta que pongamos un valor erróneo

Código: Seleccionar todo

while (edad >= 0 && edad <= 18);
Así conseguiremos que el bucle se repita siempre que estemos dentro del rango adecuado, y salgamos cuando ya no lo esté.
Si introduzco un valor edad = 5
5 >= 0 TRUE
5<=18 TRUE
Resultado TRUE->Sigo en el bucle

Para un valor de -1
-1>=0 FALSE ...como para que la evaluación sea TRUE los dos han de serlo, y el primero ya no lo es, se sale.
Resultado FALSE->Me voy del bucle

Para un valor de 20
20 >= 0 TRUE...vamos bien, seguimos con la siguiente....
20<=18 FALSE...se estropeó la cosa
Resultado FALSE->Me voy del bucle.

En fin, que te he escrito un tocho tremendo. Espero no liarte los conceptos. Más o menos quédate con la idea de que OR necesita que las dos comparaciones sean FALSE para que el resultado sea FALSE, y AND necesita que las dos comparaciones sean TRUE para que el resultado sea TRUE. Luego, la práctica ya te va diciendo cómo usarlas.

Saludos ;-)
Aprendiendo

rubensalazar
Mensajes: 7
Registrado: 06/08/2019 3:43 am

Re: Ayuda con tarea

#8 Mensaje por rubensalazar » 09/08/2019 4:28 pm

Hola te agradesco tu ayuda:D :D :D , me ha servido de mucho otra cosa que me gustaria comentar, es que he tenido un error en los ultimas, y me gustaria saber por ejemplo , cuando coloco la consola y me salen todas las palabras pegadas no habria una manera de bajar los parrafos hacia abajo?Imagen
tambien intente implementar eso de el do while que me mostraste con las siguientes condiciones Imagen pero al momento de ejecutarlo siempre pasa a la siguiente sin evaluarla, me refiero a que cuando por ejemplo coloco 6 siempre pasa a el mensaje porfavor digite su segunda nota.

Código: Seleccionar todo

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

/*
En una institución educativa, el profesor de la clase de tecnología requiere desarrollar
una aplicación que calcule el promedio de las notas de sus estudiantes y determine si
aprobaron o no aprobaron la materia. Es de tener en cuenta que el profesor a sacado 4 
notas y que el promedio para aprobar debe estar entre 3.5 y 5.0 puntos.
A través de una condición anidada pregunte si la nota está entre 3 y 3.5. Si es así, el
estudiante tiene una oportunidad de recuperar y el mensaje a imprimir será el siguiente: “
En este momento no tiene aprobada la materia de tecnología, pero tiene la oportunidad de recuperar.”.
 Si la nota está por debajo de 3 el mensaje será “No aprobado” 
y si la nota está por encima de 3.5 el mensaje a imprimir será “Aprobado”.


El usuario debe digitar 4 notas y con base a ellas calcular el promedio.
„h Al finalizar digite su nombre y apellidos como un comentario en el codigo del programa.
*/


 
int main(){
	float nota,nota1,nota2,nota3;
	printf("Bienvenido,por favor digite sus notas para sacar su promedio ");
	do{	cout<<"Digite aqui su primera nota :"<<endl;
	cin>>nota1;
	}while(nota1>=1 && nota1<=5);
	do{cout<<"Digite aqui su segunda nota :"<<endl;
	cin>>nota2;
	}while(nota2>=1 && nota2<=5);
	cout<<"Digite aqui su tercera nota :"<<endl;
	cin>>nota3;
	//PROCESO
	nota=(nota1+nota2+nota3)/3;
	//CONDICIONES
	
		if(nota>= 3.0 && nota<=3.5){ printf("En estos momentos no tiene aprobada la materia de tecnologia,"
	"pero tiene la oportunidad de recuperar.");}else if(nota<=3.0){printf("No aprobado");}
	else(nota>= 3.5);{printf("Aprobado");}
	system("pause");
	return 0;
	
	
} 
Adjuntos
sd.PNG
sd.PNG (49.62 KiB) Visto 525 veces
Captura.PNG
Captura.PNG (15.77 KiB) Visto 525 veces

rubensalazar
Mensajes: 7
Registrado: 06/08/2019 3:43 am

Re: Ayuda con tarea

#9 Mensaje por rubensalazar » 09/08/2019 4:32 pm

Me equivoque en este caso era con el condicional switch ,, este es el codigo pero me da varios errores por ejemplo switch quantity not a interger
#include <iostream>
#include <cstdlib>
using namespace std;

/*
En una institución educativa, el profesor de la clase de tecnología requiere desarrollar
una aplicación que calcule el promedio de las notas de sus estudiantes y determine si
aprobaron o no aprobaron la materia. Es de tener en cuenta que el profesor a sacado 4
notas y que el promedio para aprobar debe estar entre 3.5 y 5.0 puntos.
A través de una condición anidada pregunte si la nota está entre 3 y 3.5. Si es así, el
estudiante tiene una oportunidad de recuperar y el mensaje a imprimir será el siguiente: “
En este momento no tiene aprobada la materia de tecnología, pero tiene la oportunidad de recuperar.”.
Si la nota está por debajo de 3 el mensaje será “No aprobado”
y si la nota está por encima de 3.5 el mensaje a imprimir será “Aprobado”.
El usuario debe digitar 4 notas y con base a ellas calcular el promedio.
„h Al finalizar digite su nombre y apellidos como un comentario en el codigo del programa.
*/
int main(){
float nota,nota1,nota2,nota3;
printf("Bienvenido,por favor digite sus notas para sacar su promedio\n");
do{cout<<"Digite aqui su primera nota :"<<endl;
cin>>nota1;
}while(nota1>=1 || nota1<=5);
do{cout<<"Digite aqui su segunda nota :"<<endl;
cin>>nota2;
}while(nota2>=1 || nota2<=5);
cout<<"Digite aqui su tercera nota :"<<endl;
cin>>nota3;
//PROCESO
nota=(nota1+nota2+nota3)/3;
//CONDICIONES
switch(nota){
case nota>= 3.0 && nota<=3.5): printf("En estos momentos no tiene aprobada la materia de tecnologia,"
"pero tiene la oportunidad de recuperar.");
break;
case (nota<=3.0): printf("No aprobado");
break;

case (nota>= 3.5):printf("Aprobado");
break;

}

system("pause");
return 0;
}


Me gustaria colocar un mensaje, en el cual si el usuario coloca un 6 por ejemplo, se imprimiera un mensaje que dijera, por favor recuerde que la minima nota es 1 y la maxima 5, pero no tengo mucho conocimiento

dehm
Mensajes: 328
Registrado: 29/04/2011 7:31 am

Re: Ayuda con tarea

#10 Mensaje por dehm » 10/08/2019 3:31 am

Hola.
A la primera pregunta....esta es fácil...puedes poner un /n (salto de línea o un endl (este sólo con cout, no con printf)

Algo así:

Código: Seleccionar todo

cout<<"Hola\nrubensalazar"
si quieres hacerlo más legible:

Código: Seleccionar todo

cout<<"Hola"<<"\n"<<"rubensalazar"
Con endl

Código: Seleccionar todo

cout<<"Hola"<<endl<<"rubensalazar"
Respecto a la segunda duda....los case no admiten otro valor que no sea int. Por eso no te vale evaluar un 3.4 por ejemplo.

En este caso sería mejor que definieras las diferentes opciones como hiciste anteriormente, usando un intervalo

Código: Seleccionar todo

if (nota>x && nota <y)// o if (nota>=x && nota <=y)
{.....}

Y por último, hablando de la validación de las entradas de datos, la condición para salir del bucle es que la nota esté entre 0 y 10 (o lo que tengas que definir). Esto quiere decir que no se saldrá si la nota introducida es menor que 0 o mayor que 10

Código: Seleccionar todo

    float nota,nota1,nota2,nota3;
    printf("Bienvenido,por favor digite sus notas para sacar su promedio\n");
    do
    {
        cout<<"Digite aqui su primera nota :"<<endl;
        cin>>nota1;
    }
    while(nota1<0 || nota1>10);
    do
    {
        cout<<"Digite aqui su segunda nota :"<<endl;
        cin>>nota2;
    }
    while(nota2<0 || nota2>10);
    do
    {
        cout<<"Digite aqui su segunda nota :"<<endl;
        cin>>nota3;
    }
    while(nota3<0 || nota3>10);
//PROCESO
    nota=(nota1+nota2+nota3)/3;
    cout<<"Nota: "<<nota;
Aprendiendo

rubensalazar
Mensajes: 7
Registrado: 06/08/2019 3:43 am

Re: Ayuda con tarea

#11 Mensaje por rubensalazar » 10/08/2019 4:30 am

cuando hago eso, se repite y no sale del ciclo, cuando digito por ejemplo 5 vuelve y me pregunta lo mismo..

Código: Seleccionar todo

int main(){

float nota,nota1,nota2,nota3;
	printf("Bienvenido,por favor digite sus notas para sacar su promedio\n");
	do{cout<<"Digite aqui su primera nota :"<<endl;
	cin>>nota1;
	}while(nota1>=0 || nota1<=5);
	do{cout<<"Digite aqui su segunda nota :"<<endl;
	cin>>nota2;
	}while(nota2>=0 || nota2<=5);
	do{cout<<"Digite aqui su tercera nota :"<<endl;
	cin>>nota3;
	}while(nota3>=0 || nota2<=5)
	//PROCESO
	;nota=(nota1+nota2+nota3)/3;
	//CONDICIONES
	
		if(nota>= 3.0 && nota<=3.5){ printf("En estos momentos no tiene aprobada la materia de tecnologia,"
	"pero tiene la oportunidad de recuperar.");}else if(nota<=3.0){printf("No aprobado");}
	else(nota>= 3.5);{printf("Aprobado");}
	system("pause");
	return 0;
}
Adjuntos
Captura.PNG
Captura.PNG (49 KiB) Visto 501 veces

dehm
Mensajes: 328
Registrado: 29/04/2011 7:31 am

Re: Ayuda con tarea

#12 Mensaje por dehm » 10/08/2019 6:35 am

Lee bien mi mensaje y el código que te he puesto, que hay diferencias con el que pones ;-)
Aprendiendo

rubensalazar
Mensajes: 7
Registrado: 06/08/2019 3:43 am

Re: Ayuda con tarea

#13 Mensaje por rubensalazar » 10/08/2019 6:40 am

Vale te lo agradezco, me has ayudado bastante :) ten un buen dia :!:

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 7 invitados