Cita de: YreX-DwX en 16 Noviembre 2018, 03:26 AM
Muy bien, empecemos por partes.Código (C++) [Seleccionar]
#include <iostream>
#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 (C++) [Seleccionar]
#include <iostream>
#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 (C++) [Seleccionar]
const int TAM = 101;
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 (C++) [Seleccionar]
for (i = 0; i < TAM; i++) // CICLO FOR PARA RELLENAR LOS 3 VECTORES CON CEROS EN TODAS SUS POSICIONES.
{
valores[i] = 0;
numeros[i] = 0;
solucion[i] = 0;
}
Pero esto no es necesario ya que si en la declaración hacemos:Código (C++) [Seleccionar]
const int TAM = 101;
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 (C++) [Seleccionar]
for (i = 1; i < TAM; i++) // ESTE CONDICIONAL ME VA GUARDAR LOS NUMEROS DE 2 EN 2 HASTA EL 200 EN LA VARIABLE VALORES .
{
valor = i * 2;
valores[i] = valor;
}
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 (C++) [Seleccionar]
cout << "Solucion = ";
if (solucion[0] != 0)
{
cout << solucion[1];
}
for (i = 1; i < TAM; i++)
{
if (solucion[i] != 0)
{
cout << " - " << solucion[i];
}
}
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.
Vale muchísimas gracias por tu respuesta , estos codigos no los hago yo son así que nos lo da el profesor para que lo analizemos , tal cual digamos correr el programa en frío se que los arreglos empiezan de la posición 0 esto es muy correcto pero en el programa lo inicializo en 1 y declaro la dimensión del vector en [101] porque a según nosotros en el laboratorio de la universidad no usas Dev c++ , si no el visual basic c++ , y según acá si lo declarase vector[100] no leria el programa la posición 100 si no desde la posición 0 a la posición 99 , saludos.