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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++ Linux] Explicación de codigo [Principiante]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: [C++ Linux] Explicación de codigo [Principiante]  (Leído 5,938 veces)
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: [C++ Linux] Explicación de codigo [Principiante]
« Respuesta #10 en: 28 Enero 2012, 19:06 pm »

10 / 2 = 5... y ¿Resto 0? Eso es lo que no comprendo.

Sí, a ver. En la división de toda la vida identificas al dividendo, al divisor, al cociente y al resto. Si el dividendo es 10 y el divisor es 5, el cociente es 2 y el resto es 0. ¿Con manzanas? Mamá cerdita quiere repartir 5 manzanas entre sus 2 cerditos. Le da 2 a cada hijito y le sobra 1 manzana (el resto). Se come ella esa última manzanita ^^

Si el dividendo es 15 y el divisor 4, el cociente es 3 y el resto es 3 (15 = 4*3 + 3). El resto es lo que te sobra de una división entera.

Xandrete, gracias por la aclaración. Aunque el compilador nunca se quejó de eso, voy a tener cuidado con lo que me dices. Y supongo que puedo prescindir de la palabra new al crear el array ¿O no?

No, el operador new no es prescindible. Es, de hecho, lo más importante. Sirve para reservar espacio en la memoria dinámica. Ha de estar ahí (si no lo has visto aun, te dejo un link).

Por cierto, DickGumshoe, ya veo que eres el sheriff más rápido del oeste. Ya vi tu mensaje, pero como ya tenía escrito el mío, lo mando igualmente, xD.

Saludos  ;D

EDITO: quiero decir, el operador new es imprescindible si quieres que el tamaño del array se pueda decidir en tiempo de ejecución. Si no, siempre puedes hacer el truco del almendruco, que es fijar un tamaño máximo. Haces el array de ese tamaño y le preguntas al usuario el número de elementos que va a necesitar.


« Última modificación: 28 Enero 2012, 19:21 pm por Xandrete » En línea

satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: [C++ Linux] Explicación de codigo [Principiante]
« Respuesta #11 en: 28 Enero 2012, 19:10 pm »

Hola

Te lo voy a explicar con manzanas. Si tienes 10 manzanas y las divides entre 3 personas, cada persona recibe 3 manzanas y sobra 1 (recuerda que son divisiones enteras), pues esa manzana que sobra es el resto.

Cuando te enseñaron a dividir no te dijeron Dividendo/divisor = cociente+resto?? pues ese resto.

En cuanto al código que has puesto ahora: i%3 puede tener 3 valores (divide cualquier número entre 3, verás que el resto siempre es 0, 1 o 2), pues cuando i%3 es 0 quiere decir que ese número es múltiplo de 3. Por ejemplo:

1%3 es 1 porque 1/3 = 0 y de resto 1, luego 1 NO es múltiplo de 3
2%3 es 2 porque 2/3 = 0 y de resto 2, luego 2 NO es múltiplo de 3
3%3 es 0 porque 3/3 = 1 y de resto 0, luego 3 es múltiplo de 3
4%3 es 1 porque 4/3 = 1 y de resto 1, luego 4 NO es múltiplo de 3
5%3 es 2 porque 5/3 = 1 y de resto 2, luego 5 NO es múltiplo de 3
6%3 es 0 porque 6/3 = 2 y de resto 0, luego 6 es múltiplo de 3
.
.
.

En cuanto a lo de si puedes prescindir de la palabra new sí que puedes, siempre y cuando crees el array con un tamaño especificado en tiempo de compilación y no en tiempo de ejecución como dijo Xandrete. Si vas a reservar memoria dinámica sí que lo necesitas.

Saludos

Advertencia - mientras estabas escribiendo, fueron publicadas 2 respuestas. Probablemente desees revisar tu mensaje.


« Última modificación: 28 Enero 2012, 19:14 pm por satu » En línea

Breakbeat como forma de vida
EAX_

Desconectado Desconectado

Mensajes: 26


inside myself..


Ver Perfil
Re: [C++ Linux] Explicación de codigo [Principiante]
« Respuesta #12 en: 28 Enero 2012, 19:17 pm »

Una vez más gracias por sus respuestas. Imaginé que iba a ser algo tan simple como el resto de la división (Acostumbraba llamarlo "lo que sobra").

Bien, creo haber entendido. Por último les dejo nuevamente el código para que lo vean y agradecería que me dijeran si el orden está correcto.

Código
  1. #include<cstdlib>
  2. #include<ctime>
  3. #include<iostream>
  4. #include<iomanip>
  5. using namespace std;
  6.  
  7. int f;
  8. int* num = new int[f];
  9.  
  10. bool checkrep(int n, int num[])
  11. {
  12.    for(int i = 0; i < f; i++)
  13.        if(n == num[i])
  14.            return true;
  15.    return false;
  16. }
  17.  
  18. int main()
  19. {
  20.  
  21. cout << "f = ";
  22. cin >> f;
  23.  
  24.    srand(time(NULL));
  25.    int n, i;
  26.    for(i = 0; i < f; i++)
  27.    {
  28.       do  
  29.        n = 1 + rand() % f;
  30.        while(checkrep(n, num));
  31.        num[i] = n;
  32.        cout << num[i] << " - ";
  33. }
  34.  
  35. float prom, sum = 0;
  36. int nmayor = num[0];
  37.  
  38. for(i = 0; i < f; i++) {
  39.  sum = sum + num[i];
  40.  if(nmayor < num[i])
  41.  nmayor = num[i];
  42. }
  43.  
  44. prom = sum/f;
  45.  
  46.        cout << endl << "El mayor de los numeros es: " << nmayor << endl;
  47.        cout << "La suma de los numeros es: " << sum << endl;
  48. cout << "El promedio de los numeros es: " << setprecision(3) << prom << endl;
  49.  
  50. }
  51.  

Ahora intentaré validar "f" para que solo se puedan introducir números y en un rango determinado.

Saludos.
En línea

"Everyone is a genius. But if you judge a fish on its ability to climb a tree, it will live its whole life believing it is stupid." - Albert Einstein
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: [C++ Linux] Explicación de codigo [Principiante]
« Respuesta #13 en: 28 Enero 2012, 19:30 pm »

¡¡¡NOOOOOOOO (grito desvaneciéndose en la inmensidad  ;D) !!!

Fíjate:
 
Código
  1. int f;
  2. int* num = new int[f];

Dos cosas: new es un operador. Es decir, es como el +, o como el -, o como el =. ¿Y qué es un operador? Un operador, en el fondo, es una función (de hecho, la suma de dos enteros a,b, se puede efectuar haciento tanto a+b como operator+(a,b)). Por tanto, el new int[f] no puede estar "en el aire", lo tiene que ejecutar alguien (el main o alguna función referenciada por el main). La otra cosa es... si se pudiera hacer lo que pretendes... ¿que espacio se reservaría en memoria si a f no se le ha dado aún ningún valor explícitamente ;)? f contiene lo que se viene a llamar, entre amigos, basura. Esta basura puede ser desde un 0 hasta un 7515 (por poner un número, puede ser cualquier valor que entre en el rango de representación de un entero).
« Última modificación: 28 Enero 2012, 19:34 pm por Xandrete » En línea

EAX_

Desconectado Desconectado

Mensajes: 26


inside myself..


Ver Perfil
Re: [C++ Linux] Explicación de codigo [Principiante]
« Respuesta #14 en: 28 Enero 2012, 19:39 pm »

Ooops, tienes razón. Entonces, estaría correcto ponerlo justo debajo de

Código
  1. cout << "f = ";
  2. cin >> f;

Y no habría problema.

Gracias denuevo (:
En línea

"Everyone is a genius. But if you judge a fish on its ability to climb a tree, it will live its whole life believing it is stupid." - Albert Einstein
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda, explicacion de codigo
Programación C/C++
negux 1 2,842 Último mensaje 28 Abril 2010, 08:12 am
por Akai
ayuda con explicacion de codigo
Programación C/C++
Fatmf44 1 2,580 Último mensaje 24 Junio 2010, 00:10 am
por Littlehorse
explicacion de codigo
Programación C/C++
flony 3 2,910 Último mensaje 12 Octubre 2010, 14:06 pm
por flony
Ayuda no entiendo esta parte del codigo, soy principiante
Programación C/C++
spiderboot 3 3,291 Último mensaje 30 Enero 2014, 18:14 pm
por spiderboot
Explicación de un codigo
Programación C/C++
Nabore 2 2,080 Último mensaje 8 Mayo 2016, 06:38 am
por Nabore
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines