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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 ... 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 [102]
1011  Programación / Programación C/C++ / Re: Programa C++ Tengo una duda con respecto a este programa. en: 16 Noviembre 2018, 03:26 am
Muy bien, empecemos por partes.

Código
  1. #include <iostream>
  2. #include <stdlib.h>

Lo primero de todo parece que estás programando en C++. Por lo tanto sería recomendable usar el formato de las librerías de C++: una libreria C  se declararía como <libreria.h> como has hecho en <stdlib.h>. Su variante en C++ sería <clibreria>, es decir, que la misma librería quedaría <cstdlib>. El funcionamiento va a ser correcto de todos modos pero es simplemente por aclarar esto desde los comienzos de la programación. Por tanto sería conveniente modificarlo por:

Código
  1. #include <iostream>
  2. #include <cstdlib>

Dicho esto empecemos con el programa ya que veo algunos errores básicos. Creo que no es necesario analizar exhaustivamente las primeras líneas; en ellas declaramos 3 arrays (vectores) de tamaño 101, 3 variables i, j, z inicializadas a 1 y una variable valor. Es conveniente también no usar "números mágicos", estos son números que aparecen literales como el 101, por lo tanto el tamaño de los arrays es conveniente hacerlo con constantes, así si queremos cambiar el tamaño solo tenemos que cambiarlo en un sitio y el programa funcionaría correctamente:

Código
  1. const int TAM = 101;
  2. int valores[TAM], numeros[TAM], solucion[TAM];

Vamos a revisar el acceso a los arrays. Un array v[3] tiene tamaño = 3, va de 0 a 2, por lo tanto sus posiciones son v[0], v[1], v[2]. Visto esto el bucle quedaría así para poner todas las posiciones a 0:

Código
  1. for (i = 0; i < TAM; i++) // CICLO FOR PARA RELLENAR LOS 3 VECTORES CON CEROS EN TODAS SUS POSICIONES.
  2. {
  3.  valores[i] = 0;
  4.  numeros[i] = 0;
  5.  solucion[i] = 0;
  6. }

Pero esto no es necesario ya que si en la declaración hacemos:

Código
  1. const int TAM = 101;
  2. int valores[TAM] = {0}, numeros[TAM] = {0}, solucion[TAM] = {0};

Excepcionalmente si inicializamos los arrays así, se inicializarían todas las posiciones del array a 0.

El segundo bloque empezando en i = 1, guarda el doble de i (imagino que en la posición i del vector) e incrementa i en 1. Primero vemos que falta el índice del array como en el bucle anterior y en segundo lugar vemos que si i empieza en 1 la posición 0 no se modifica por lo que valores[0] = 0. Una alternativa es usar un bucle for y evitar el uso del 101 usando la variable TAM, también se puede evitar el uso de la variable valor (opcional). Esto quedaría:

Código
  1. for (i = 1; i < TAM; i++) // ESTE CONDICIONAL ME VA GUARDAR LOS NUMEROS DE 2 EN 2 HASTA EL 200 EN LA VARIABLE VALORES .
  2. {
  3.  valor = i * 2;
  4.  valores[i] = valor;
  5. }

Excepcionalmente date cuenta que si la primera operación que hacemos sobre el array valores es de escritura no es necesario inicializarlo a 0 y simplemente empezando este segundo for en i = 0 el resultado obtenido sería el mismo, pero no es mala idea inicializar las variables en la declaración.

El tercer bloque es estructuralmente idéntico al segundo ya explicado por lo que puedes aplicar las mismas modificaciones. Recuerda siempre poner el índice al array, es fundamental.

El cuarto bloque... Vamos a corregirlo de raíz porque tiene graves problemas. Pero para ello necesito que me expliques cual es el funcionamiento deseado ya que tiene muchas interpretaciones posibles o si simplemente te han dado este código para que lo analices (de ser así un código un poco...). Bueno espero tu respuesta.

Ahora analizamos el bloque final. Me he dado cuenta ahora de que igual no sabías que la primera posición del array es la 0, no la 1.
El trozo de "Solucion = " hay que ponerlo antes del if ya que si la posición 1 es 0 pero las otras no, se escribirían las otras posiciones pero no aparecería "Solucion = " por pantalla. Además faltaba el índice dentro del for de <solucion>. El código quedaría algo así:

Código
  1. cout << "Solucion = ";
  2. if (solucion[0] != 0)
  3. {
  4.  cout << solucion[1];
  5. }
  6.  
  7. for (i = 1; i < TAM; i++)
  8. {
  9.  if (solucion[i] != 0)
  10.  {
  11.   cout << " - " << solucion[i];
  12.  }
  13. }

Y para finalizar, comentarte que hay muchas referencias a evitar la llamada system("pause"). Como alternativa te recomiendo cin.get();
Puedes buscar información adicional sobre esto si te interesa.

PD: Viendo el funcionamiento del programa igual lo correcto era crear arrays de tamaño 100 y empezar metiendo el 1 en posición 0. Ya que es un valor que he visto que no se ha utilizado en toda la ejecución del programa. Te lo dejo a ti por si quieres intentarlo y me cuentas.
En cuanto a tu segunda pregunta no puedo darte una respuesta sin saber cual es el funcionamiento buscado en el bloque que he dejado sin explicar.
1012  Programación / Programación C/C++ / Re: ayuda con subprograma que calcule promedio de vector en: 14 Noviembre 2018, 04:10 am
Varias cosas a tener en cuenta. Aunque en este programa al ser sencillo no afectan al funcionamiento:
 
Hay que limitar el uso de variables globales, ya que estas se pueden alterar desde cualquier parte del programa. Por eso es mejor declarar como global y constante el tamaño del vector pero el vector es mejor declararlo dentro del main (date cuenta de que si el vector es global no es necesario pasarlo como parámetro de la función ya que se puede usar directamente).

Si declaramos una constante <TAM> para el tamaño del vector, usar esa constante en la declaración del vector. Así si queremos cambiar el tamaño del vector sólo tendríamos que cambiarlo en el valor de <TAM> y el programa ya estaría modificado.

En el prototipo de la función es cierto que no hace falta indicar el nombre de las variables, solo su tipo. Pero ya que está el nombre del vector, quedaría mejor poner el nombre del segundo parámetro (el tamaño en este caso). Recalcar que al ser variables globales no sería necesario pasarlas como parámetros ya que ya existen en todo el programa. Nótese también que en el main se utiliza la variable <TAM> que es global mientras que en el cuerpo de la función se utiliza <tam> ya que es el nombre con el que nos referimos al segundo parámetro. Podría eliminarse ese segundo parámetro y usar <TAM> dentro de la función también.

En el main hay dos bucles: uno para rellenar el vector y otro para mostrar cada elemento. Esto se puede hacer en un solo bucle para ahorrar tiempo y no tener que recorrer el bucle completo dos veces.
Además de eso se especifica que el resultado es real, por lo que la función debe devolver un float o un double, no un int.

Puedes probar a cambiar algunas de las cosas que he comentado arriba para entender su funcionamiento y si tienes alguna duda no dudes en preguntar.
El código final quedaría algo por el estilo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. const int TAM = 5400;
  6.  
  7. float promedio_V(int vector[], int tam);
  8.  
  9. int main(){
  10. int vector[TAM];
  11.  
  12. srand(time(0));
  13.  
  14. for(int i = 0; i < TAM; i++){
  15. vector[i] = 1 + rand() % 100;
  16. printf("%d\n", vector[i]);
  17. }
  18.  
  19. printf("El promedio del vector es %.2f\n", promedio_V(vector, TAM));
  20.  
  21. return 0;
  22. }
  23.  
  24. float promedio_V(int vector[], int tam){
  25. float suma = 0;
  26.  
  27. for(int i = 0; i < tam; i++)
  28. suma += vector[i];
  29.  
  30. return suma/tam;
  31. }
  32.  
1013  Programación / Programación C/C++ / Re: Determinar el Mayor de cinco numeros en: 4 Agosto 2018, 01:28 am
Ya que no puedes usar un array para resolver este problema, una posible solución es crear una función auxiliar con dos parámetros y usarla en tu función.
Quedaría algo de este estilo:

Código
  1. int Mayor (int a, int b){
  2.    int mayor = a;
  3.    if (b > mayor)
  4.        mayor = b;
  5.    return mayor;
  6. }
  7.  
  8. int Mayor (int n1, int n2, int n3, int n4, int n5){
  9.    int mayor = Mayor (Mayor (n1, n2), Mayor (n3, n4));
  10.    mayor = Mayor (mayor, n5);
  11.    return mayor;
  12. }
  13.  

Ambas funciones pueden tener el mismo nombre porque el número de parámetros es distinto.
Si tienes alguna duda al respecto puedes buscar información sobre la sobrecarga de funciones.

Al llamar a la función Mayor desde la propia función se resuelven primero las funciones interiores y finalmente la exterior.
Como faltaría por comprobar un número lo he comprobado en otra línea aunque se podría hacer todo a la vez.
Queda un poco ilegible el código pero puedes probar a hacerlo.
Páginas: 1 ... 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 [102]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines