UTNianos

Versión completa: Ayuda con Algoritmos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Necesito que me ayuden con el tema de Repetir PARA y Repetir Mientras, no entiendo esta herramienta , se usar variables, decision, condicion, pero las estructuras de repeticion no me salen (Repetir PARA y Repetir Mientras). Osea en un ejercicio nose cuando poner estas cosas
El "Repetir para" o comunmente conocido como For, sirve para repetir una cantidad de veces determinadas, cuando conoces cuántas veces se va a ejecutar, por ejemplo, un ejemplo medio tonto, queres mostrar los primeros 10 números, haces un for de 1 a 10, y sólo imprimis la variable que toma el valor:
for x:= 1 to 10 do
begin
writeln(x);
end;

El "Repetir mientras" o while, sirve para repetir mientras se cumpla una determinada condicion, esta es la que más se usa para recorrer archivos porque no sabes cuántas lineas tenes, entonces usas el comando EOF, mientras que no sea fin de archivo..

Espero que te sirva de ayuda... Saludos!!
For y While son dos estructuras de control de la progarmación estructurada que sirve para iterar n cantidad de veces, en otras palabras, son algoritmos de repetición.

estructura del for:

For (condición)
{"lo que queres que se repita
}

estructura While

While (condicion)
{"lo que queres que se repita
}


Parecen lo mismo, pero la principal diferencia, y como dijo Mercevico, radica en que el For nos pide saber la cantidad de veces que queremos que algo se repita, mientras que el while nos pide una condición para que se detenga la repetición.

Cualquier algoritmo For se puede escribir como un while, no cualquier While puede ser abordado como For. Entonces, para qué es el For? es una manera más compacta y legible de repetir cierta acción, además es más eficiente en ciertos casos.

Para simplificar, si queres repetir algo y sabes la cantidad de veces exacta que se va repetir, utiliza una instrucción For, si queres repetir algo que no sabes cuántas veces va iterar, entonces tienes que utilizar un While.

Ejemplos:
+Se ingresan DIEZ (10) números enteros y se requiere calcular la suma de todos los numeros ingresados.
int n;
n=0;

For (i=0, i<10, i++)
{ scan(n);
n=n+n
}

creo que la sintaxis de c es asi, apenas me acuerdo


+Se ingresan valores enteros DIFERENTES de 0, calcule la suma de todos los números.

En este ejemplo no sé cuántos números se van a ingresar, pero sé que se van a ingresar hasta que uno de los números sea 0


int n;
n=0;

scan(n);

While (n!=0)
{ n = n+n;
scan(n);
}




En las instrucciones For no hay que tener muchas precauciones más que saber las veces que hay que ciclar, pero la instrucción WHile es algo más susceptible a error. Si en una instrucción while, la condición no es lógicamente correcto, se puede crear un ciclo infinito que no termina hasta que se cierra el programa, la causa de que pase eso es que la condición nunca se cumple. Por ejemplo si la condición fuera (n!=1,5) ya que nunca se va ingresar 1,5 porque no es un número entero.
"Repetir para"?

Para que no te confundas, yo lo cambiaría por repetición exacta, ya que la cantidad de iteraciones la especificás vos a diferencia del "repetir mientras" (originalmente repeat until), donde iterará cuantas veces sea necesario hasta que no satisfaga la condición, la cual podés conocer como una de las dos clases de repeticiones indefinidas.

(15-06-2013 20:56)mercevico escribió: [ -> ]El "Repetir para" o comunmente conocido como For, sirve para repetir una cantidad de veces determinadas, cuando conoces cuántas veces se va a ejecutar, por ejemplo, un ejemplo medio tonto, queres mostrar los primeros 10 números, haces un for de 1 a 10, y sólo imprimis la variable que toma el valor:
for x:= 1 to 10 do
begin
writeln(x);
end;

El "Repetir mientras" o while, sirve para repetir mientras se cumpla una determinada condicion, esta es la que más se usa para recorrer archivos porque no sabes cuántas lineas tenes, entonces usas el comando EOF, mientras que no sea fin de archivo..

Espero que te sirva de ayuda... Saludos!!

En realidad para el caso de leer archivos mientras no sea fin de archivo (aquí "NOT EOF(A)"), deberías usar un while/mientras, ya que en el último registro estarías trabajando con un EOF, y el while interrumpe eso a tiempo antes de que el algoritmo explote.


Naturalmente es cuestión de práctica, sólo que hay que tener en cuenta que hay un ciclo definido (for), y dos ciclos indefinidos: uno precondicional (while) y otro postcondicional (repeat until). En el momento de practicar olvidá lo de antes y recordá esto último, ya que tanto en código como algoritmicamente trabajarás con algo como eso.
(15-06-2013 21:40)rob. escribió: [ -> ]"Repetir para"?

Para que no te confundas, yo lo cambiaría por repetición exacta, ya que la cantidad de iteraciones la especificás vos a diferencia del "repetir mientras" (originalmente repeat until), donde iterará cuantas veces sea necesario hasta que no satisfaga la condición, la cual podés conocer como una de las dos clases de repeticiones indefinidas.

Repeat until es "repetir hasta que", que no es lo mismo que "mientras".

Vos tenés tres sentencias de iteración:

- For: Realiza un ciclo FINITO, es decir, de 1 a N, siendo N un valor conocido. Ejemplo: Necesito imprimir los primeros 50 registros de mi archivo, entonces hacés un:

FOR I := 1 to 50
(el resto del código)

- While: Realiza un ciclo que no sabés cuantas iteraciones va a tener, tampoco vas a saber si mínimamente ejecuta una vez. Ejemplo: de un archivo tengo que imprimir las personas mayores a 20 años... entonces realizás un WHILE, usando la condición "edad > 20"

- Repeat until: También es un ciclo indefinido, pero por la implementación que tiene, sí o sí la condición se cumple una vez. El repeat until no se suele usar mucho.
Estás con pascal o con C++? Voy a suponer C++.

Un for es:

for( accionInicial; condición; acciónFinalVuelta){

sentenciasARepetir;
}



Eso en un while equivaldría a:


accionInicial;
while(condición){

sentenciasARepetir;
acciónFinalVuelta;

}



Si quiero hacer algo 10 veces:

Con while:


int i=0;
while(i<10){
algo;
i++;
}


Con for:


for(int i=0; i<10; i++){
algo;
}

Pero guarda que eso lo confunde (el tema del while finito). Lo que importa (en algoritmos) es que el while es un ciclo indefinido y el for es un ciclo de N cantidad de repeticiones. Se los toma como conceptos cerrados, si bien existe esa posibilidad de forzar una cantidad.

Nada, eso.
Muchas Gracias a todos! en realidad hablaba de Pseudocodigo.

estos dos ejercicios son una boludes para ustedes pero no me sale, es de repeticion incondicional .

1) Implementar un programa que lea dos numeros M y N e iprima la suma de las primeras N potencias de M, contando desde la potencia 0.

2) Implementar un programa que lea tres números P, Q, R e imprima las potencias de P empezando desde la que esta en la posicion Q hasta la R.


ME AYUDANNNNNNN , GRACIAS!!!!!!!!!!
yo tenia entendido que son diferentes porque el for, se ejecuta al menos una vez, siempre. mientras que el while no.

por ejemplo.


Cita:Si quiero hacer algo 10 veces:

Con while:


int i=0;
while(i<10){
algo;
i++;
}


Con for:


for(int i=0; i<10; i++){
algo;
}


ahi se ve que el while, primero pregunta "tal cosa, es cierta?" y luego ejecuta lo que tiene adentro.

el for, en cambio, primero ejecuta el codigo y luego, se pregunta "tal cosa, es cierta?"

tanto un while como un for pueden ser infinitos o no. ambos son muy parecidos dependiendo de la estructura, pero la diferencia es que el while primero pregunta la condicion, y luego ejecuta o no el codigo. el for por otro lado siempre va a entrar al menos una vez.


int i=10;
while(i<10){
algo;
i++;
}


Con for:


int i=10;
for(; i<10; i++){
algo;
}


ahi se ve una diferencia.

@ontopic:

esos dos programas que proponen la intuicion te dice que deberia hacer con un for cada uno, ya que los ciclos que va a tener son valores conocidos.
(20-06-2013 17:26)Maik escribió: [ -> ]yo tenia entendido que son diferentes porque el for, se ejecuta al menos una vez, siempre. mientras que el while no.

por ejemplo.


Cita:Si quiero hacer algo 10 veces:

Con while:


int i=0;
while(i<10){
algo;
i++;
}


Con for:


for(int i=0; i<10; i++){
algo;
}


ahi se ve que el while, primero pregunta "tal cosa, es cierta?" y luego ejecuta lo que tiene adentro.

el for, en cambio, primero ejecuta el codigo y luego, se pregunta "tal cosa, es cierta?"

tanto un while como un for pueden ser infinitos o no. ambos son muy parecidos dependiendo de la estructura, pero la diferencia es que el while primero pregunta la condicion, y luego ejecuta o no el codigo. el for por otro lado siempre va a entrar al menos una vez.


int i=10;
while(i<10){
algo;
i++;
}


Con for:


int i=10;
for(; i<10; i++){
algo;
}


ahi se ve una diferencia.

@ontopic:

esos dos programas que proponen la intuicion te dice que deberia hacer con un for cada uno, ya que los ciclos que va a tener son valores conocidos.

igual no vi pascal todavia, lo quiero hacer en PSEUDOCODIGO jaja gracias!
el for y el while van a ser asi en la mayoria de los lenguajes tengo entendido, y esa es su diferencia.

ahora, ni idea lo que es el pseudocodigo Yaoming
El pseudocódigo es explicar la forma de crear un código verdadero, pero en un lenguaje más criollo. Generalmente el pseudocódigo es una boludez que no se pide y mucho menos en Algoritmos, pero a veces te puede ayudar a entender la lógica.

Vamos por partes:
1) Los puntos suspensivos son una suerte de indentación para que lo puedas entender bien. Pueda que esté mal, lo hice medio a lo apurado.

leer m
leer n
sumatoria vale 1 // caso base de la potencia 0 ya contemplada
para i=1 a n hacer
... subsumatoria vale 1 // para que arroje un resultado
... para j=1 a i hacer
... ... a subsumatoria multiplico por m
... fin para
... a sumatoria le sumo subsumatoria
fin para


Algo parecido deberías pensar en el punto 2, no lo hago yo porque estoy un poco apurado; es un poco más engorroso pero con ésta idea podés pensar algo. Pero como ves, el pseudocódigo te permite pensar esto para hacerlo simple en Pascal, C++ o donde quieras, ya que enuncia la lógica del enunciado, y no el modelo terminado.
Si hay algo mal chiflen, lo mismo si hay alguna duda.

Hasta luego!
(20-06-2013 17:07)Vizka escribió: [ -> ]Muchas Gracias a todos! en realidad hablaba de Pseudocodigo.

estos dos ejercicios son una boludes para ustedes pero no me sale, es de repeticion incondicional .

1) Implementar un programa que lea dos numeros M y N e iprima la suma de las primeras N potencias de M, contando desde la potencia 0.

2) Implementar un programa que lea tres números P, Q, R e imprima las potencias de P empezando desde la que esta en la posicion Q hasta la R.


ME AYUDANNNNNNN , GRACIAS!!!!!!!!!!

Vos preguntaste por los conceptos, lo que pasa que para ejemplificar había que tirar código o pseudocódigo.
Sabés redactar en pseudocódigo? A partir de lo que más o menos te explicó cada uno, deberías poder plantear los ejercicios, porque lo que vos no entendias era iteraciones, no pseudocódigo.
Si tenés dudas de cómo plantearlo en pseudocódigo, justo arriba de mi post está explicado.
Pero jamás te van a tomar pseudocódigo, así que no hagas mucho foco en eso. Qué lenguaje están viendo? Deberías hacer foco en aprender estas cosas en diagramas (que es lo que toman en parcial y final) y código (que toman en el tp)
En resumen: ¿con quién tenés Algoritmos?

Enviado desde mi SK17a usando Tapatalk 2
La diferencia que busca no debe ser entre for y while, sino la diferencia más significativa entre while y until.

El for es un "patrón" del while que lo agregaron como feature, "matemáticamente" no hay diferencia.
URLs de referencia