virtualword
Te invitamos a registrarte para poder acceder a todo el contenido gratuito que esta comunidad provee.

Saludos Wink

Soluciones lección 011

Ir abajo

Soluciones lección 011

Mensaje  Kyshuo Ayame el Mar Nov 19, 2013 1:06 pm

Soluciones selectas para los ejercicios propuestos en la lección 11:

Solución ejercicio 3:

Código:
 Descripcion:

 Programa que carga un arreglo de enteros desde la entrada estandar y luego halla
 el mayor valor del arreglo junto con el indice que le corresponde, ademas de
 determinar si el arreglo se encuentra ordenado en forma ascendente. Por mayor
 simplicidad de la solucion, se incluyen en un mismo programa los tres programas
 solicitados en la letra del ejercicio.
 -------

*)


program Arreglos (input,output);

(* Definicion del tipo de datos para el arreglo *)
const N = 7;

type RangoN = 1..N;
    Tabla = Array [RangoN] of Integer;

var i, posMax: integer;
    ascendente: boolean;
    arreglo: Tabla;

begin

  (* Cargo el arreglo desde teclado *)
  for i:=1 to N do
  begin
      write ('Ingrese el ',i,'-esimo entero: ');
      read(arreglo[i])     
  end;

  (* hallo el maximo valor y el indice que le corresponde *)
  posMax := 1;
  for i:=2 to N do
      if arreglo[i] > arreglo[posMax] then
        posMax := i;     

  (* determino si el arreglo esta ordenado en forma ascendente *)
  ascendente := false;
  i := 1;
  while (i < N) and (arreglo[i] < arreglo[i+1]) do
      i := i+1;
  if i = N then
      ascendente := true;

  (* muestro resultados *)
  writeln ('Maximo valor del arreglo: ',arreglo[posMax]);
  writeln ('Posicion correspondiente: ',posMax);
  if ascendente then
      writeln('El arreglo esta ordenado en forma ascendente')
  else
      writeln('El arreglo no esta ordenado en forma ascendente')

end.
===================================================================================

Solución ejercicio 4:

Código:
Descripcion:

 Programa que determina si una cadena de caracteres es subcadena de otra cadena de
 caracteres. La primera cadena tiene M caracteres de longitud, mientras que la
 segunda cadena tiene N caracteres de longitud. Se asume que la primera cadena es
 mas corta que la segunda cadena. Los caracteres de ambas cadenas son leidos desde
 la entrada estandar.
 -------

*)


(* Precondicion: M > N *)
program SubCadena (input,output);

(* Definicion de los tipos de datos para las cadenas *)
const M = 5;
      N = 12;

type CadenaM = Array [1..M] of Char;
    CadenaN = Array [1..N] of Char;

var i,j,k: integer;
    CadA: CadenaM;
    CadB: CadenaN;
    esSubCadena: boolean;

begin

  (* Ingreso la primera cadena por teclado *)
  write('Ingrese ',M,' caracteres: ');
  for i:=1 to M do
      read(CadA[i]);     
  readln;

  (* Ingreso la segunda cadena por teclado *)
  write('Ingrese ',N,' caracteres: ');
  for j:=1 to N do
      read(CadB[j]);     

  k := 1;
  esSubCadena := false;

  (* verifico si la primera es subcadena de la segunda *)
  repeat

      i := 1;
      j := k;

      (* trato de encontrar dos caracteres distintos *)
      while (i <= M) and (CadA[i] = CadB[j]) do
      begin
        i := i+1;
        j := j+1
      end;

      (* si logre llegar al final de la primera cadena, puedo
        afirmar que es subcadena de la segunda *)
      if i=M+1 then
        esSubCadena := true
      else
        k := k+1;

      (* me detengo cuando son iguales o cuando ya no me
        alcanzan los caracteres de la segunda cadena *)
  until (esSubCadena) or (k > N-M+1);

  (* mostrar resultados *)
  if esSubCadena then
  begin
      write ('el texto ''');
      write (CadA);
      write (''' se encuentra dentro de ''');
      write (CadB);
      writeln('''.')
  end else
  begin
      write ('el texto ''');
      write (CadA);
      write (''' no se encuentra dentro de ''');
      write (CadB);
      writeln('''.')
  end

end.
avatar
Kyshuo Ayame
Admin

Mensajes : 105
Fecha de inscripción : 14/11/2012
Edad : 29

Ver perfil de usuario http://virtualworld.foroargentina.net

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.