Programando desde 0: 10- Repetición condicional con REPEAT...UNTIL
-
Amigo, ejercicio 4(centinela): no consigo asimilar como devolver el resultado, es decir, en el texto "llama para desarrollar un reporte de cooperación$". La salida debe ser ("ll rr ll oo"). ¿Cómo poder mostrar esos valores, con un FOR...quiza?. Me refiero a que podrían ser más valores.
Y otra pregunta se me ocurre declarar un par de variables con los valores de las consonantes y vocales, ¿crees que estaría bien?. para así saber cuales se repiten.
Y no te disculpes por la demora, seguro tienes que estudiar o trabajar, en fin no te preocupes.
GRACIAS. -
Invetige un poco en internet jeje...ahora con respecto al ejercicio 4 podrías darme una recomentaci'on? llevo dias sin poder resolverlo, creo que soy de tus alumnos menos privilegiados ja,ja...me refiero a que voy un poco atrasado ¿no lo crees?...
Bueno Vlady que estes super bien. Gracias por todo. -
-
Senior Member - Moderador
05/08/2012#34 Re: Programando desde 0: 10- Repetición condicional con REPEAT...UNTILLa idea es tener un bucle que se reptia hasta leer el centinela, es decir, el caracter $. Deberías además tener algún buclesito interno para saltear los espacios ya que se podría ingresar muchos espacios entre una palabra y otra.
Lees un caracter y lo almacenas. Luego lees otro y te fijas si es igual al que ya almacenaste. En caso afirmativo escribes la salida, en caso negativo almacenas ahora el nuevo caracter y repites el procedimiento.
Espero eso te ayude amigo.
Respecto a tu comentario, aquí nadie va atrasado , cada uno va a su ritmo. Este curso no tiene fecha de inicio ni de final. Además, vas trabajando y es lo que importa. Otros van más adelante pero jamás preguntaron nada, lo cual implica que en realidad no han hecho todos los ejercicios.
Espero tus comentarios respecto al problema del ejercicio.
Salduos. -
-
Genial Vlady...Lo que me pusiste fue exactamente lo que hice, a diferencia que no sabia muy bien como comparar los valores dados, hasta que analicé el programa y di con que tenía que asignarle al primer valor leido el segundo valor leido, esto después de verificar que estos dos NO eran iguales...Muchas gracias!!!
Y con respecto al ejercicio5(calculadorasimple) no consigo como poder leer los operadores, al momento que los lee me manda un error te posteo el código y me aconsejes.
GRACIAS.Que estes muy bien!!!Código:PROGRAM calculadorasencilla; USES crt; CONST fin='=';//Centinela VAR num, resultado: integer;//Variables para los n£m.el resultado. operador: char;//Variable para los operadores aritmeticos BEGIN clrscr; writeln('Ingrese las operaciones a realizar: '); REPEAT //Inicializamos un bucle por si el usuario ingresa m s de un //n£mero seguido. repeat read(num);//Leemos el primer n£mero. until (ord(num) < 48) or (ord(num) > 57);//verificamos que sea un n£mero read(operador); //leemos el operador aritmetico. CASE operador OF // Realizamos las operaciones necesarias '+': begin resultado := num + num; end; '*': begin resultado := num * num; end; '/': begin resultado := num div num; end; '-': begin resultado := num - num; end; '=': begin write('El resultado es: ',resultado);//mostramos el resultado end; END; UNTIL (operador=fin);//Fin del repeat principal END. -
Que hay amigo!!, te cuento que ya concluí el ejercicio6, y no estaba tan dificil, se me complicaron más los otros y el ej5 que todavía no resuelvo. En fin, hice un código diferente al que hizo alguien en este post (no recuerdo su nombre) lo posteo por si le quieres hechar un vistazo y para que lo vean los interesados.
Gracias Vlady!!! y espero tu respuesta del ejercicio5, para terminar y así poder continuar con las lecciones.Código:PROGRAM contadorletra; USES crt; CONST fin='.'; espacio=' '; VAR letra, car: char; //variables para almacenar la letra a contar y leer la oracion. contador: integer; //para contar las veces que aparece letra. BEGIN clrscr; write('Ingresa la letra que quieres contabilizar: '); readln(letra); //leemos la letra a contar write('Letra: ',letra);//mostramos la letra writeln; writeln('Ingresa la oraci¢n: ');//pedimos que ingresen la oracion write('Oracion: '); //donde escribiran la oracion repeat //saltamos los espacios al principio de la oracion read(car); until car <> espacio; //hasta que car sea diferente a espacio REPEAT repeat if car = letra then //si car es = letra contamos 1 y aumetamos begin contador:= contador + 1;//aumentamos el valor read(car);//leemos nuevamente el caracter end else //si car y espacio no son igual entonces read(car);//leemos el siguiente caracter until car = espacio; //fin del repeat hasta que car sea igual a espacio repeat//leemos ahsta que car sea dif a espacio read(car); until car <> espacio; UNTIL car=fin;//fin del repeat principal cuando car sea igual a punto //mostramos el resultado writeln('Las veces que aparece: ',letra); write('En la oraci¢n son: ',contador); readkey; END.
SUERTE!!! -
-
Senior Member - Moderador
06/08/2012#37 Re: Programando desde 0: 10- Repetición condicional con REPEAT...UNTILAmigo, te pido mil disculpas pero esta vez te dejaré la solución publicada porque ando con poco tiempo. Estudiala y verás que resulta sencillo. Esto te dará pautas para posteriores problemas.
Código:PROGRAM Calculadora; CONST espacio= ' '; //Una constante con el caracter de espacio. VAR resultado, valor_leido: INTEGER; caracter: CHAR; BEGIN (*Consumimos todos los espacios, si los hay, al inicio de la línea. Esto lo hacemos leyendo los caracateres hasta encontrar algo que distinto a un espacio.*) Repeat read(caracter); Until caracter<>espacio; (*Ahora tenemos algo que no es un caracter y que, como sabemos que la entrada será siempre correcta, tendremos un número*) (*Si un número lo leemos como caracter, para pasarlo a entero restamos el ordinal de ese caracter menos el ordinal del caracter '0'*) resultado:= Ord(caracter)-Ord('0'); (*Volvemos a saltear espacios*); Repeat read(caracter); Until caracter<>espacio; (*Ahora comenzamos con el procesamiento de datos*) (*Mientras no encontramos un = procesamos datos*) While caracter<>'=' do begin (*Si leemos un operador, salteamos espacios y leemos el siguiente número para procesarlo. Luego continuamos con la lectura normal.*) (*Este case realiza las mismas tareaes para cada operador, lo único que varía es, obviamente, la operación que realizamos. Hago este código así para que se entienda bien, podría optimizarse y acortarse mucho.*) Case caracter of '+': begin //Salteamos espacios. Repeat read(caracter); Until caracter<>espacio; //Pasamos el número leído a entero valor_leido:= Ord(caracter)-Ord('0'); //Procesamos la suma. resultado:= resultado + valor_leido; end; '-': begin //Salteamos espacios. Repeat read(caracter); Until caracter<>espacio; //Pasamos el número leído a entero. valor_leido:= Ord(caracter)-Ord('0'); //Procesamos la resta. resultado:= resultado - valor_leido; end; '*': begin //Salteamos espacios. Repeat read(caracter); Until caracter<>espacio; //Pasamos el número leído a entero. valor_leido:= Ord(caracter)-Ord('0'); //Procesamos el producto. resultado:= resultado*valor_leido; end; '/': begin //Salteamos espacios. Repeat read(caracter); Until caracter<>espacio; //Pasamos el número leído a entetro. valor_leido:= Ord(caracter)-Ord('0'); //Procesamos la división como división entera. resultado:= resultado DIV valor_leido; end; end; //Volvemos a saltear espacios. Repeat read(caracter); Until caracter<>espacio; end; WriteLn; Write('El resultado es ',resultado,'.'); //Estos READLN son simplemente para dejar el programa pausado antes de cerrarse. ReadLn; ReadLn; END.
Que andes bien. -
-
Aqui va mi duda, estaba haciendo el ejercicio 6 (el de contar las palabras que terminan con determinada letra) y entonces me surgio un problema
CONST
espacio= ' ';
VAR
caracter, caracter_anterior: char;
letra_elegida: char;
cuenta: integer;
BEGIN
//-----
caracter_anterior:= espacio;
cuenta:=0;
writeln('ingrese la letra elegida.');
readln(letra_elegida);
writeln('ingrese texto finalizado con un punto');
//-----
repeat
read(caracter);
until caracter <> espacio;
//----
repeat
read(caracter);
IF (caracter_anterior)=(letra_elegida) AND (caracter)=(espacio) then
begin
cuenta:= cuenta+1;
end;
//----------------
caracter_anterior:= caracter;
until(caracter) = '.';
writeln('la cantidad de palabras terminadas con ',letra_elegida,'es ',cuenta);
END.
Mi problema es que me decia algo asi como que AND no sirve para CHAR, lugo evadi el problema cambiando esa parte por:
.
.
.
if (caracter_anterior) = (letra_elegida) then
begin
if (caracter)= (espacio)then
begin
cuenta:= cuenta+1;
end;
end;
En fin el programita quedo pero tengo la duda de por que no me dejaba la primera vez cuando habia usado un AND. -
-
Senior Member - Moderador
06/09/2012#39 Re: Programando desde 0: 10- Repetición condicional con REPEAT...UNTILPorque escribiste mal los paréntesis amigo. Tu línea era
debería haber sidoCódigo:IF (caracter_anterior)=(letra_elegida) AND (caracter)=(espacio)
Espero te quede clara la duda.Código:IF (caracter_anterior=letra_elegida) AND (caracter=espacio) THEN
Saludos. -
