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 - Estudiante000000

#1
Cita de: YreX-DwX en  6 Febrero 2019, 18:59 PM
Es una clase para manejar los streams de entrada.
Normalmente cuando se trabaja con streams se incluye la librería <fstream>. Esta incluye tanto los streams de entrada <ifstream> (input stream) como los streams de salida <ofstream> (output stream). :-X

No tiene nada que ver con la sentencia if?
#2
Programación C/C++ / DUDA QUE SIGNIFICA ESTO?
6 Febrero 2019, 18:48 PM
 Buenas , que significa ifstream , significa que solo para usar if? si me dicen porfas.
#3
Cita de: CalgaryCorpus en 25 Enero 2019, 22:02 PM
Te sugiero que pongas else entre los ifs porque los nuevos valores son considerados en los siguientes ifs, si lo dejas así.


Osea que tendria que poner if else if else if y asi?
Pero teniendo en cuenta que se tienen que evaluar todos los casos cuando modifique el txt?
#4
Casi resuelto  ;-)
#5
Cita de: YreX-DwX en 22 Noviembre 2018, 03:21 AM
Lo siento pero no, más que nada porque nunca me he parado a buscar códigos ajenos ya que no es algo que me guste mucho si no es para ayudar a otra persona. Pero si no encuentras nada siempre puedes coger cualquier código de internet y hacerte tú mismo la pregunta o intentar comprender su funcionamiento sin ejecutarlo y después lo ejecutas para ver si estabas en lo correcto.

En este mismo foro en otros posts he visto que hay algunos códigos que trabajan con temas matemáticos que al fin y al cabo creo que son los mejores para hacer lo que quieres hacer ya que la dificultad no está en las instrucciones que se usan sino en ver por qué se están usando.

PD: Yo mismo he escrito algunos trozos de código para resolver algunos de estos posts que te comento. Si te interesa el programa entero o que te mande alguno de los programas que tengo yo puedes decírmelo por un mensaje privado y te lo puedo mandar si te sirve de ayuda.

Vale muchas gracias te mande un mensaje privado
#6
Cita de: YreX-DwX en 22 Noviembre 2018, 02:48 AM
Claro porque lo que hace es guardar los elementos que están tanto en <valores> como en <numeros> y en <valores> tienes los múltiplos de 2 y en <numeros> los múltiplos de 3. Y los números que están en ambos son entonces múltiplos de 2 y de 3 y eso por definición son los múltiplos de 6.

Muchisimas gracias siempre es buena contar con tus explicaciones precisas , por cierto no sabes de alguna pagina  que pueda encontrar programas asi , que esten escritos y pidan determinar para que sirve el programa , corriendolo en frio o te pidan determinar algun valor en especifico como este que me pedia hallar solucion[3]?
#7
Cita de: YreX-DwX en 22 Noviembre 2018, 01:48 AM
Aquí lo tienes, es decir, sí que va a entrar en el <if>. Simplemente que el proceso explicado brevemente sería:
<i = 1> <j = 1> No entra.
Se repite el <for> hasta el último valor de j (no va a entrar en ninguna repetición).
<i = 1> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 2>
<i = 2> <j = 1> No entra.
Se repite el <for> hasta el último valor de j (no va a entrar en ninguna repetición).
<i = 2> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 3>
<i = 3> <j = 1> No entra.
EXCEPCIÓN: <i = 3> <j = 2> ENTRA. Entonces <z = 1> solucion[1] = valores[3] = 6
Se repite el <for> hasta el último valor de j (ya no entra más veces).
<i = 3> <j = 99> No entra.

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 4>. Entonces valores[4] = 8 (no va a entrar)
Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 5>. Entonces valores[5] = 10 (no va a entrar)

Sale del <for>, se incrementa i y con <goto iterar> vuelves a empezar el <for> pero ahora con <i = 6>. Entonces valores[6] = 12
Ahora si va a entrar cuando j sea 4 ya que numeros[4] = 12.

Es decir el programa coge la posición <i> de <valores> y la compara con todas las posiciones de <números>, si coincide alguno lo mete en <solucion> y cuando lleg al final de <numeros> incrementa <i>; entonces ahora compara la siguiente posición de <valores> con todas las posiciones de <numeros> y si coincide alguno lo mete en <solucion>.
Es decir, que el programa compara todos los elementos de <numeros> con cada elemento de <valores>. Al final lo que hace es comparar los dos vectores enteros.

PD: Cuando digo que vuelve a entrar en el <for>, por lo que he explicado antes, j vuelve a empezar desde 1.

Vale osea que entra en todos los multiplos de 6? y por eso estan  guardados en solucion?
#8
Cita de: YreX-DwX en 22 Noviembre 2018, 00:54 AM
Todo el análisis que no aparece en la cita es correcto, está bastante bien. Pero a partir de aquí es donde tienes un error así que vamos a ello.
Voy a ponerte un ejemplo para que veas a donde quiero llegar:
Código (cpp) [Seleccionar]

iterar:
cout << "Se repite la iteracion" << endl;
for (j = 1; j <= 100; j = j + 1){
    if (valores[i] == numeros[j]){
        solucion[z] = valores[i];
        z = z + 1;
    }
}
if (i <= 100){
    i = i + 1;
    goto iterar;
}


Si pruebas a ejecutar esto en lugar del código original (solo he añadido una línea después de la etiqueta iterar) verás el porqué del error y el porqué de que no se recomiende usar etiquetas y <goto> para los saltos. El sentido de añadir esa frase antes del <for> es que cada vez que se ejecute <goto etiqueta> se va a repetir esa frase en pantalla... Por qué? :huh: Vamos a analizarlo de nuevo sin la instrucción que he añadido que es meramente demostrativa:
El comienzo que has hecho es correcto, antes de llegar al <for> tienes <i = 1>, entonces (importante) ENTRAS en el <for> por lo tanto <j = 1>. Comparamos:
valores[i = 1] = 2
numeros[j = 1] = 3
Son distintos, entonces otra iteración del <for> ahora con <j = 2>. Entonces vamos a comparar cada posición de <numeros> con <valores[1]>. Nunca va a ser cierto ya que <numeros> sigue creciendo y <valores[1]> es menor que todos. Llegamos al final del <for> con <j = 100> ahora ya no se va a repetir, entonces salimos del <for> y miramos el <if> de fuera: ¿i <= 100? Sí, entonces <i = 2> y <goto iterar>. Volvemos ANTES del <for> entonces se ejecuta la inicialización otra vez, <i = 1> y se repite el proceso comparamos cada valor de <numeros> con <valores[2]> lo que nunca va a ser cierto.

Creo que ahora ya vas viendo lo que va a hacer: ¿Cuándo va a entrar al <if> que hay dentro del <for>? Cuando un valor esté en <valores> y en <numeros>. Y como en <valores> tenemos los múltiplos de 2 y en <numeros> tenemos los múltiplos de 3... Que va a haber en <soluciones>? :silbar: Exacto, los múltiplos de 2 y 3 al mismo tiempo, es decir, los múltiplos de 6.

Ahora ya podemos responder a la pregunta, te la dejo a ti que seguro que te hace más ilusión dar con la respuesta correcta en vez de decírtelo yo. ;-) ;-)


Casi entiendo lo que me quieres decir , pero si nunca entra al if como me mostrara los multiplos de 6? aun no lo veo :(
#9
Cita de: AlbertoBSD en 22 Noviembre 2018, 00:10 AM
El siguiente fragmento del codigo puede ser optimizado:


int valores[101], numeros[101], solucion[101];
//..

for (i = 0; i <= 100; i = i + 1)
{
 valores[i] = 0;
 numeros[i] = 0;
 solucion[i] = 0;
}



Por


int valores[101]= {0}, numeros[101] = {0}, solucion[101] = {0};



O


int valores[101], numeros[101], solucion[101];
memset(valores,0,101*sizeof(int);
memset(numeros,0,101*sizeof(int);
memset(solucion,0,101*sizeof(int);



Asi todos los elementos del arreglo se inicializan con valores 0.

Saludos

Lo se pero quisiera saber en que consiste el resto del codigo  no lo entiendo
#10
Cita de: YreX-DwX en 16 Noviembre 2018, 23:28 PM
En ese caso me gustaría que alguien me explicase cómo pueden compilar esos códigos. Porque hasta donde yo llego no puedes acceder a cada elemento de un array n-dimensional sin usar algún tipo de indexación y en este programa se modifican los valores de los arrays sin hacer uso de los índices.

Duda resuelta: No aparece la indexación porque al no utilizar etiquetas de código la indexación de la variable i, es decir entre corchetes [ ], se traduce como letra cursiva y no se ve tal cual en el texto.


Analize el programa pero aun no lo entiendo ya puse el programa bien para que lo puedas visualizar y acabo de explicar lo que entiendo en algunas partes del programa

Código (cpp) [Seleccionar]




#include<iostream>
using namespace std;
int main()
{
int valores[101], numeros[101], solucion[101];
int i = 1,j=1,z=1;
int valor;

for (i = 0; i <= 100; i = i + 1)
{
  valores[i] = 0;
  numeros[i] = 0;
  solucion[i] = 0;
}

i = 1;
while (i<101)
{
  valor = i * 2;
  valores[i] = valor;
  i = i + 1;
}


for (i = 1; i <= 100; i = i + 1)
{
  valor = i * 3;
  numeros[i] = valor;
}




i = 1;

iterar:

for (j = 1; j <= 100; j = j + 1)

{
  if (valores[i] == numeros[j])
  {
   solucion[z] = valores[i];
   z = z + 1;
  }
}

if (i <= 100)
{
  i = i + 1;
  goto iterar;
}




if (solucion[1] != 0)
{
  cout << "Solucion = " << solucion[1];
}

for (i = 2; i <= 100; i = i+1)
{
  if (solucion[i] != 0)
  {
   cout << " - " << solucion[i];
  }
}

cout << endl;

return i;


}


[/quote]


En mi analisis y porfa si me puedes corregir necesito entender esta parte del programa

Código (cpp) [Seleccionar]


while (i<101)
{
  valor = i * 2;
  valores[i] = valor;
  i = i + 1;
}


En esta parte del codigo estoy almacenando valor ( que serian los numeros de 2  en 2 hasta el 200)  en el vector valores , y mi arreglo vectores quedaria algo asi en su composicion.


vectores={0,2,4,6,8,10,12,14,16,18,20,22...200} Hasta llegar al numero 200 , comenzando desde el valor 0 , en la posiciòn 0 que no fue modificado porque el ciclo while empezo desde i=1.



Siguiendo con el analisis , nos vamos al ciclo for siguiente.

Código (cpp) [Seleccionar]



for (i = 1; i <= 100; i = i + 1)
{
  valor = i * 3;
  numeros[i] = valor;
}



Analizando este for , saco como conclusion que sera para almacenar valor ( que serian los numeros de 3 en 3 hasta el 300) en el vector numeros ,y mi arreglo numeros quedaria de la siguiente manera.



numeros={0,3,6,9,12,15,18,21,24,27...300} Y Asi sucesivamente hasta llegar al 300 comenzando por el valor 0 , en la posicion 0 cual permanecio asi , porque el for empezo desde i=1
.

Continuando con el analisis  y la parte que no entiendo es la siguiente.


Código (cpp) [Seleccionar]


i = 1;

iterar:

for (j = 1; j <= 100; j = j + 1)

{
  if (valores[i] == numeros[j])
  {
   solucion[z] = valores[i];
   z = z + 1;
  }
}

if (i <= 100)
{
  i = i + 1;
  goto iterar;
}



En esta parte basicamente segun lo que veo es que voy a empezar con ciclo for desde que j=1, hasta que j<=100 , y cual con un if voy  a comparar los arreglos valores y numeros[j] , y si hacemos la primera comparacion tengo que  :

valores[i=1] = 2  y numeros[j=1] = 3 cual la condicion del if no deberia de cumplirse , asi que pasaria al siguiente if



Código (cpp) [Seleccionar]


if (i <= 100)
{
  i = i + 1;
  goto iterar;
}



  En este if como i=1 es menor o igual que 100 , se cumple la condicion y voy a iterar i , y posterior redireccionarme con el goto iterar hasta este for.



Código (cpp) [Seleccionar]



iterar:

for (j = 1; j <= 100; j = j + 1)

{
  if (valores[i] == numeros[j])
  {
   solucion[z] = valores[i];
   z = z + 1;
  }
}



  Como itero j y i , quedarian i=2 y j=2 , y se haria de nuevo la comparacion  pero tendria lo siguiente

valores[i=2] = 4 y en numeros[j=2] = 6 , lo cual de nuevo no se cumpliria la condicion del if y asi sucesivamente  y siempre se harian las comparaciones hasta que i=99 lo cual que esa condicion  nunca se cumpliria , no se me equivoco en algo dime porfavor.