elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9
41  Programación / Programación C/C++ / Re: Problema con el metodo BubbleSort en: 3 Octubre 2016, 09:58 am
otra cosa, tu menú presenta inconsistencias
¿En que consisten esas inconsistencias?

Otra cosa: No he probado el codigo de Jesusinfo, pero deberia funcionar perfectamente para un solo alumno. De hecho, el fallo que tendria al principio no deberia afectarle.

En cualquier caso la variable string no se guardará nunca correctamente, ya que el parametro se lo estas pasando por valor y no por referencia. Si no entiendes que es el paso por de parametros por valor y por referencia, bueno tampoco me voy a parar a explicarlo aqui lo miras en internet y yata. Lo que quiero decir es que si en lugar del string le pasas el array de strings y obtienes el primer elemento si deberia guardarlo por el tema de los punteros y tal.
42  Programación / Programación C/C++ / Re: Problema con el metodo BubbleSort en: 2 Octubre 2016, 19:59 pm
Pues entendi en su mayoría tu respuesta, pero lo mas importante no lo entendí en realidad
Perdona si no me explique bien antes.

Veamos, vamos a suponer que en el programa vamos a meter solo a 2 estudiantes.
Entonces el arreglo con las notas tendra una longitud para almacenar 5*2 valores (5 notas para cada alumno).
Entonces el array de los nombres y de las notas te quedara tal que asi:
Código:
Array de los alumnos:   [nombre1,                      nombre2]
Array de las notas:     [nota1,nota2,nota3,nota4,nota5,nota6,nota7,nota8,nota9,nota10]

Los espacios solo los he puesto para que veas que las 5 primeras notas del array de notas corresponden al alumno1, y los 5 siguientes a los del alumno2.

Ahora bien, en tu metodo burbuja, por lo que veo haces lo siguiente:
Código:
1- Coges el elemento 5*pos+j (que seguramente habrás cambiado a asignaturas*pos+j).
2- Lo comparas con el elemento 5*pos+j+1.
3- Si es mayor intercambias los valores, y si es menor lo dejas tal cual.
4- Repites desde el paso 1 con el siguiente elemento

Bueno pues tu error esta en el paso numero 2, ya que en los arrays que expuse antes:
Código:
Array de los alumnos:   [nombre1,                      nombre2]
Array de las notas:     [nota1,nota2,nota3,nota4,nota5,nota6,nota7,nota8,nota9,nota10]

Suponte que la mayor nota del alumno1 es la nota 5. Entoces el metodo deberia dejar la nota 5 intacta en lugar de intercambiarla. Pero suponte que la nota5 del alumno1 es MAYOR que la nota6 del alumno2. Entonces sucede lo siguiente:

Código:
5*pos+j == 4
notas[5*pos+j] == nota5

5*pos+j+1 == 5
notas[5*pos+j+1] == nota6

nota5 > nota6 == true

Al ser nota5 mayor que nota6 se intercambian los valores, por lo que el valor mas grande del alumno1 pasa a ser la primera nota del alumno2.
¿Lo ves ahora?

La forma de solucionarlo es muy sencilla. Solo tienes que cambiar el numero de iteraciones del bucle de la variable j. En lugar de
Código
  1. for(j=0;j<5;j++)
pon
Código
  1. for(j=0;j<4;j++){

El bucle de la variable x tambien deberia ser
Código
  1. for(x=0;x<4;x++)
pero de todos modos da un poco lo mismo, ya que con que lo recorra al menos 4 veces las demas veces que la recorra no hará nada. Si hubieras puesto
Código
  1. for(x=0;x<200;x++)
Tambien funcionaría.
43  Programación / Programación C/C++ / Re: ¿Que parte de C no es compatible con C++? en: 2 Octubre 2016, 19:30 pm
En la pagina de la que puse el link que te lleva al comentario, dicen esto:

"you can write C code that is invalid in C++ or that does something different in C++ than that in C."

Traducido al español:
"Tu puedes escribir codigo C que es invalido en C++ o hace algo diferente en C++ respecto a C"

Mi pregunta es: ¿Que codigo de C hace eso? Es que tenia entendido que todo el codigo de C puede ser compilado sin problemas con un compilador de C++.

De todos modos, la respuesta de ivancea96 me vale.
44  Programación / Programación C/C++ / Re: Problema con el metodo BubbleSort en: 2 Octubre 2016, 02:31 am
En el metodo insertar, insertas el numero del nuevo alumno y sus notas, pero no su nombre, lo que podra suponer un problema al llamar despues al metodo imprimir, el cual imprime el nombre de los alumnos junto a sus notas. En el metodo borrar pasa mas de lo mismo.

Cada vez que haces un bucle como este:
Código
  1. for(int x = 0; x < asignatura; x++)
accedes al array de notas poniendo
Código
  1. notas[5*i+x]
Es de suponer que ese 5 vale 5 porque es lo que vale asignaturas. Si es asi, ¿Por que no pones directamente asignaturas otra vez? algo como esto:
Código
  1. notas[asignaturas*i+x]
De esta forma, si modificas el valor de la variable asignaturas el programa no fallará.

Si has visto los punteros y la relaccion que existe entre estos y los arrays (Sospecho que no), deberias de entender porque cuando llamas al metodo burbuja y luego al metodo imprimir, estos aparecen modificados. Comento esto porque supongo que el metodo metodoburbuja solo te deberia mostrar los valores ordenados y no dejarlos asi.
En cualquier caso lo que haces en el metodo burbuja es intercambiar 2 valores del array consecutivos cuando el que esta en una posicion menor tiene un valor mayor que el que esta en la posicion siguiente. Utilizas un solo array para guardar TODAS las notas de TODOS los alumnos, de modo que si la ultima nota de un alumno es mayor que la primera nota del alumno siguiente, los valores se modifican resultando en que la primera nota del alumno siguiente sera siempre la mayor de las notas del alumno anterior.
45  Programación / Programación C/C++ / ¿Que parte de C no es compatible con C++? en: 2 Octubre 2016, 01:08 am
Buscando en internet diferencias entre C y Objective-C me encontre con un usuario que explicaba que cualquier programa escrito en C siempre funcionará en Objective-C mientras que en C++ no siempre funcionaria

Aqui esta el comentario que dice eso (esta en ingles)
http://stackoverflow.com/a/13153293

Asi que... ¿Que parte de C no es compatible con C++?
46  Programación / Programación C/C++ / Maquina virtual de C en: 1 Octubre 2016, 00:21 am
Del mismo modo que hay una maquina virtual para java, ¿Lo hay tambien para C para no tener que compilar el codigo fuente en cada sistema operativo? Si lo hubiera, solo tendrias que llevarte el ejecutable de C a otros ordenadores y olvidarte de tener que compilarlo.
No se si me he explicado bien.
47  Programación / Programación C/C++ / Re: Cambiar valor de una variable de tipo estructura en: 27 Septiembre 2016, 19:52 pm
Código
  1. e.x =  21;

O si e es un puntero

Código
  1. e->x =  21;

Solo he puesto de ejemplo esa estructura para no poner mas variables dentro de la misma, pero imaginate que tiene 200. No vas a ir de uno en uno asignandolo todo.

De todos modos gracias, pero ya encontre la respuesta investigando:
Código
  1. e = E(21);

Antes creia que la unica manera de usar el constructor era asi:
Código
  1. Estructura e (43);
48  Programación / Programación C/C++ / Cambiar valor de una variable de tipo estructura en: 27 Septiembre 2016, 12:42 pm
Estructura o clase, me da lo mismo.

El problema es si hay alguna forma de hacerlo sin tener que crear una nueva variable.
Por ejemplo:
Código
  1. struct E{
  2.   int x;
  3.   E(int n) : x(n) {};
  4. };
  5. int main(){
  6. E e (43);
  7. //e (21) <- No es valido, tendria que crear una nueva variable.
  8. E e2 (21);
  9. e = e2;
  10. }
¿Alguna idea de como hacer esto sin tener que recurrir a una variable auxiliar?
49  Programación / Programación C/C++ / Re: Hola buenas! en: 24 Septiembre 2016, 01:03 am
En primer lugar, en las reglas del foro que NADIE lee, deberia en alguna parte estar escrito que el asunto de un hilo debe describir que clase de problema es el que se tiene. Por ejemplo en tu caso podrias haber puesto "Programa que calcula perimetros" o "Ayuda con if-else" o algo asi por el estilo.

En segundo lugar, cuando vas a enviar un mensaje, entre el asunto y el cuadro de texto donde escribes el mensaje deben aparecer unos cuantos botones y unos fantasmitas que puedes usar como emoticonos. A la derecha, en el menu desplegable donde pone "Código GeSHI", si despliegas ese menu y buscas "C++" y lo seleccionas, se te ponen en el mensaje que estas escribiendo algo como [ code ] y [ /code ]. Entre esas dos etiquetas puedes escribir el codigo para que te quede bonito y asi podemos ver como es el programa para ayudarte mejor.
50  Programación / Programación C/C++ / arrays y punteros. en: 24 Septiembre 2016, 00:48 am
Código
  1. int array[5];
  2. array[0] = 12;
  3. std::cout << &array << std::endl;//1
  4. std::cout << array  << std::endl;//2
  5. std::cout << *array << std::endl;//3

Con el codigo anterior se puede apreciar claramente que la direccion de memoria en la que esta localizado el array (1) coincide con la direccion de memoria a la que apunta el array (2). En otras palabras: los arrays son punteros que se apuntan a si mismos.

Sin embargo, si un puntero se apunta a si mismo, entonces el operador de dereferencia (el asterisco) nos devolvera la direccion de memoria del array otra vez, ya que es lo que contiene la variable. Sin embargo, en vez de eso se nos muestra el int que hayamos guardado ahi. (En este caso, el numero 12). La pregunta es ¿Por qué? Es mas ¿Cómo es posible? Según esto, estamos guardando 2 valores completamente diferentes al mismo tiempo en la misma ubicacion: la direccion de memoria del array(y del primer elemento del mismo array), y el numero 12.

Aqui dejo el codigo completo para que no tengais mas que copiar y pegar directamente:
Código
  1. #include <iostream>
  2.  
  3. int main(int argc, char** argv)
  4. {
  5. int array[5];
  6. array[0] = 12;
  7. std::cout << &array << std::endl;//1
  8. std::cout << array  << std::endl;//2
  9. std::cout << *array << std::endl;//3
  10. return 0;
  11. }

Y aqui el link a un entorno de desarrollo online con el codigo para que no tengais que molestaros en abrir ningun programa para probarlo:
https://goo.gl/7LWmg4
Páginas: 1 2 3 4 [5] 6 7 8 9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines