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 - K-YreX

#911
Programación C/C++ / Re: Arreglo funciones
20 Noviembre 2018, 23:05 PM
Cita de: Beginner Web en 20 Noviembre 2018, 14:40 PM
Se aprueba con 7, y yo tampoco sabia que con menos de 5 se aprobaba, tenias sueño lo se, asi te queria agarrar  ;-)
Cierto, fallo mío, he puesto el <if> al revés. Pero sí que es cierto que al menos en España a partir del 5 es un aprobado. No sé en qué lugares se aprueba a partir del 7. :huh:
#912
Programación C/C++ / Re: Arreglo funciones
20 Noviembre 2018, 10:40 AM
Cita de: MAFUS en 20 Noviembre 2018, 10:14 AM
Lo veo bien. El único cambio que haría sería quitar el promedio de la estructura porque siempre debe depender de los parciales. Si se guarda como un dato se podría modificar y por tanto falsear. Si no existe se obliga a calcularlo cada vez que sea necesario y por tanto es una garantía más de que sea el que toca.
Cierto, se me olvidó comentarlo. Cuando hice el programa hice una función que recibiendo un alumno como parámetro te calcule la media en vez de guardar esta como un miembro. Además usé <double> en lugar de <int> tanto para las notas como para la media. Y también había pensado en comprobar que el id del alumno que estás guardando no esté repetido; para ello recorrer el array de alumnos que ya existen y comprobar sus id's con el nuevo.

Sin embargo creo que quien creó el post no debe de haber llegado a estudiar una <struct> o <class> porque de haberlo hecho este ejercicio sería muy sencillo de resolver.
Aquí es donde viene mi cuestión... De no hacerlo usando <struct> ni <class>:
Opción 1:
Código (cpp) [Seleccionar]

const int NUM_ALUMNOS = 5;
const int NUM_NOTAS = 3;
string nombres[NUM_ALUMNOS];
int ids[NUM_ALUMNOS];
double notas[NUM_ALUMNOS][NUM_NOTAS];


Opción 2:
Código (cpp) [Seleccionar]

const int NUM_NOTAS = 3;
string alumno1, alumno2, ..., alumno5;
int id1, id2, id3, id4, id5;
double notas1[NUM_NOTAS], notas2[NUM_NOTAS],..., notas5[NUM_NOTAS];


Yo elegiría la primera porque es más general y haciendo una sola modificación puedes cambiar la cantidad de alumnos y notas/alumno. Sin embargo, creo que cuando yo empecé con estos ejercicios me habrían dicho que lo hiciese como la segunda ya que es más simple (aunque más limitada).
#913
Como programa funciona pero si estás interesado en la programación y quieres mejorar un poco ese código:
- Elimina <stdio.h>. No estás usando entradas/salidas de C, sino de C++.
- Elimina <conio.h> por favor. Y cómo uso <getchar()> ?:huh:. No lo uses, usa <cin.get()> para lo que no necesitas <conio.h>.
- Las funciones que no reciben parámetros en C++ no es necesario escribir <void> en los parámetros.
- No uses librerías acabadas en ".h" sino que empiecen por "c". Es decir: <stdlib.h> -> <cstdlib>y así con todas.
Y esto sin haber llegado a mirar el programa por dentro.
Si no te interesa y sólo quieres que el programa funciones, ya está, objetivo conseguido.
#914
Programación C/C++ / Re: Arreglo funciones
20 Noviembre 2018, 09:16 AM
Cita de: Beginner Web en 20 Noviembre 2018, 03:32 AM
Código (cpp) [Seleccionar]

typedef struct alumno{
int id;
string nombre_alumno;
int primer_parcial;
int segundo_parcial;
int tercer_parcial;
int promedio;
};

Desde mi humilde opinión yo usaría un array para las notas. Pero bueno eso ya es cosa de generalizar el programa para meter más notas.

Cita de: Beginner Web en 20 Noviembre 2018, 03:32 AM
Código (cpp) [Seleccionar]

switch(a[i].promedio){
    case 1 ... 6: cout<<"Desaprobado"<<endl;break;
    case 7 ... 10: cout<<"Aprobado"<<endl;break;
}
}

Y aquí creo que es más fácil hacerlo con un <if> ya que las condiciones no van alternadas:
Código (cpp) [Seleccionar]

if(promedio < 5)
    cout << "Aprobado" << endl;
else
    cout << "Suspenso" << endl;

Y... no sabía que hay quien considera el aprobado a partir del 7. :xD
#915
Prueba a quitar el ".h" a <iostream>. Además tienes que incluir <using namespace std;>.
En ocasiones devuelve error si lo tienes abierto en otra pantalla. Y si con esto no se soluciona, adjunta el error que te salga.

PD: El código entre etiquetas GeSHi.
Y... una cosa más... Ese código es tuyo? O está sacado de algún sitio? Porque usar <iostream> y <stdio.h>.... Aquí hay algo raro.
#916
Programación C/C++ / Re: Arreglo funciones
20 Noviembre 2018, 00:06 AM
No estamos para hacer tareas sino para resolver dudas. Tienes que especificar cual es tu duda o en que quieres que te ayudemos a avanzar, no sirve de nada que mandes el ejercicio entero y te hagamos el programa nosotros.

Si quieres puedes comentarme que partes del programa sí sabrías hacer o que conocimientos tienes (ya que dudo que hayas dado clases o o estructuras). O como llevas los arrays (la forma más sencilla es usar arrays de tamaño 5 para cada variable que te diceno usar variables sueltas para los nombres, etc y las notas guardarlas en arrays de tamaño 3, tú eres el programador, tú decides). Y si tienes algo de código hecho puedes insertarlo para que veamos cómo lo llevas (eso sí, entre etiquetas GeSHi), aunque sea una simple entrada de datos porque ni siquiera sé si estás programando en C o C++.
#917
Estaba echando un vistazo a los posts y me pareció interesante este programa por lo que me puse a investigar.Ya he conseguido crear el programa y te comento: si tienes un bucle que te crea n soluciones y tú sólo quieres la primera, debes ponerle dos condiciones al bucle y una vez obtengas la primera solución, cambias el valor de una condición para que salga inmediatamente y no siga calculando. Con eso ya debería ayudarte a que no te muestre todas las soluciones.
Suerte.
#918
Ejercicios / Re: AYUDA PLZ
19 Noviembre 2018, 07:29 AM
Te recomiendo que busques información sobre la librería <cctype>. Tiene algunas funciones que digamos que te pueden interesar... :silbar:
Y en caso de que no lo tengas permitido, ten presente que cuando comparas dos caracteres estás comparando su valor ASCII por lo que:
Código (cpp) [Seleccionar]

char caracter = 'a';
if(caracter >= 'a' && caracter <= 'z')
    cout << "El caracter es una letra minuscula" << endl;
else if(caracter >= 'A' && caracter <= 'Z')
    cout << "El caracter es una letra mayuscula" << endl;

Creo que ahí te he dado ya suficientes pistas para que lo hagas con el método que prefieras. Adapta ese código a lo que tú necesitas o mírate la librería que te he comentado, verás como alguna función te viene de perlas.
#919
Programación C/C++ / Re: Duda .
19 Noviembre 2018, 03:30 AM
Cita de: Estudiante000000 en 19 Noviembre 2018, 03:10 AM
Y para finalizar en los for entonces hacer un for de esta manera esta mal cierto
Código (cpp) [Seleccionar]
for(i=0;i=9;i++){
}

Sí, sería incorrecto, en primer lugar porque el segundo campo del <for> que debería ser una condición, no lo es, es una asignación. El funcionamiento de ese <for> es el siguiente: entras en el <for> y se asigna el valor inicial <i = 0>. Se llega a la condición que como no es una condición sino una asignación se ejecuta entonces ahora <i = 9>. Se ejecuta el interior del bucle. Termina una iteración y se produce el incremento <i = 10>, se llega a la condición de nuevo y... <i = 9>. Se vuelve a ejecutar el bucle.
Conclusión: tenemos un bucle infinito en el que i siempre vale 9.

Resumen: <a = b> asignas a <a> el valor de <b>
                 <a == b> comparas que el valor de <a> y el de <b> sean iguales

Quieres probarlo? Simple, ejecuta esto (no hace falta que modifiques nada) y podrás ver los valores de i por pantalla (no esperes que acabe):
Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;
int main(){
for(int i = 0; i = 9; i++)
cout << i << endl;
}


En todo caso la otra opción (haciendo correctamente una condición y no una asignación) sería usando dos iguales, tal que así:
Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;
int main(){
for(int i = 0; i == 9; i++)
cout << "El bucle se ha ejecutado" << endl;
}

Resultado de este código: NINGUNO. Empieza el bucle <i = 0>, llegamos a la condición... ¿<i == 9>? No, <i = 0>; entonces sale del bucle. Nunca llegará a ejecutarse lo que haya dentro del bucle.
#920
Programación C/C++ / Re: Duda .
19 Noviembre 2018, 02:45 AM
Primero:
Cita de: Estudiante000000 en 19 Noviembre 2018, 02:41 AM
Utilize esta opcion y me parece mucho mejor ,  gracias  a esto no es necesario usar variables auxiliares ¿Porque? , y Bueno el codigo me quedo asi

Porque lo que hacías antes era intercambiar el valor de la posición <i> de <pares> (o <impares>) por la de <numeros> pero con guardar el valor de <numeros> en <pares> o <impares> es suficiente.
Tú al usar una variable auxiliar estabas por decirlo de alguna manera borrando cada elemento una vez que trabajabas con él, pero no era necesario.

Segundo:
Código (cpp) [Seleccionar]

for(i=0;i<10;i++){
if(numeros[i]%2==0){
 if(numeros[i] % 2 == 0)

Aquí estás repitiendo dos veces el mismo <if>, borra uno de ellos.

Y no imprimir 0 te doy una pista: al finalizar el <for> donde clasificas los números en <pares> e <impares>; <contadorPar> vale la cantidad de dígitos pares y <contadorImpar> de la misma manera vale la cantidad de dígitos impares. Úsalos en los últimos bucles <for>.