Todas las dudas de Pascal ^_^U

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • ánima
    A tirador láser
    • 15-02-2004
    • 7082

    #1

    Todas las dudas de Pascal ^_^U

    Estoy a escasos 4 días de mi último parcial y no fui a los teoricos pip, no sé tengo bastantes dudas, para empezar con procedimientos, o sea, ser crearlos, llamarlos y toda la bola, mi mayor problema es con los parametros formales que no tengo idea ni que son ni para que sirven =/, también con los parametros actuales.
    En sintesis todo lo referido a parametros no lo entiendo.
    Cualquier infima ayuda sera agradecida ^_^''
  • Lux
    ルクス
    • 24-04-2003
    • 24465

    #2
    como te dije antes, los parámetros en un procedimiento, son las puertas que le abris para que interactue con su entorno (programa global)

    las puertas por las que entra info son los parametros por valor... y son los que no llevan VAR... sin embargo, lo que el procedimiento haga con esa info, no se modifica cuando termine el proc.

    las puertas por las que va a salir info transformada por el propio procedimiento, son los parámetros por referencia y esos sí llevan VAR.
    Si bien el procedimiento los toma como cosas con valores asignados, unicamente cuando son por referencia, el procedimiento va a poder modificar (al salir del procedimiento) esas cosas.

    Ergo... si vos queres que el procedimiento use info de ciertas variables globales, las tenes que indicar en los parámetros, sino el procedimiento no abre esas puertas y va a tirar error.

    Comentario

    • ánima
      A tirador láser
      • 15-02-2004
      • 7082

      #3
      Por ejemplo acá hice un programa con procedimientos que suma, multiplica y resta número complejos [no me acordaba como dividir y me daba paja buscar ]
      Lo que vos decis es que si yo por ejemplo quiero utilizar las variables que usa el procedimiento, acá por ejemplo la variable sr y si, fuera del mismo, debo declarlas en la global e indicarlas en los parametros?
      También estoy teniendo problemas con el case, porque me parece bastante mierda utilizar el If anidado para un menú, capaz ni se puede y estoy mandando fruta.
      El enunciado diceUtilizando procedimientos con parametros, hcaer un programa que realize las 4 operaciones básicas con números complejos.Además de los procedimientos para cáclculos desarrolar uno para presentar el menú de opciones

      program complejos;
      uses crt;
      {type
      menu=1..4;
      }
      var
      sR,sI,a,b,c,pip,d:real;
      opc:integer;
      {opc:menu;}
      procedure suma;
      begin
      si:=b + d;
      sr:=a + c;
      writeln('El resultado es ',sr:4:3,'+',si:4:3,'i');
      readln;
      end;

      procedure multi;
      begin
      sr:=a*c-b*d;
      si:=a*d+b*c;
      writeln('El resultado es ',sr:4:3,'+',si:4:3,'i');
      readln;
      end;

      procedure resta;
      begin
      si:=b - d;
      sr:=a - c;
      writeln('El resultado es(',sr,')+(',si,'i)');
      readln;
      end;
      begin
      clrscr;
      writeln('Ingrese los valores de a y b a modo de a+bi');
      readln(a,b) ;
      writeln('Ingrese los valores de c y d a modo de c+di');
      readln(c,d);
      clrscr;
      writeln('***Menú de opciones***');
      writeln('1-Sumar');
      writeln('2-Restar');
      writeln('3-Multiplicar');
      writeln('Otro número, sale el programa');
      readln(opc);
      if (opc=1) then
      suma
      else
      if opc=2 then
      resta
      else
      if opc=3 then multi
      else
      {case opc of
      1:suma;
      2:resta;
      3:multi;
      }
      end.
      Editado por última vez por ánima; 22-06-2006, 04:00 PM. Razón: =O

      Comentario

      • ánima
        A tirador láser
        • 15-02-2004
        • 7082

        #4
        Juro que en Pascal está prolijito.

        Comentario

        • Haushinka
          Intermitente
          • 16-08-2003
          • 15097

          #5
          Offtopic: no hay forma de postear el código como código?
          Outside of a dog, a book is a man's best friend. Inside of a dog, it's too dark to read

          La ficción nos mata, pero la realidad nunca estuvo viva

          Comentario

          • Haushinka
            Intermitente
            • 16-08-2003
            • 15097

            #6
            Código:
            program complejos;
              uses crt;
             {[i]type
               menu=1..4;[/i]}
              var
              sR,sI,a,b,c,pip,d:real;
              opc:integer;
              {[i]opc:menu;[/i]}
                   procedure suma;
                    begin
                    si:=b + d;
                    sr:=a + c;
                    writeln('El resultado es ',sr:4:3,'+',si:4:3,'i');
                    readln;
                    end;
            
                    procedure multi;
                    begin
                    sr:=a*c-b*d;
                    si:=a*d+b*c;
                    writeln('El resultado es ',sr:4:3,'+',si:4:3,'i');
                    readln;
                    end;
            
                    procedure resta;
                    begin
                    si:=b - d;
                    sr:=a - c;
                    writeln('El resultado es(',sr,')+(',si,'i)');
                    readln;
                    end;
            begin
             clrscr;
             writeln('Ingrese los valores de a y b a modo de a+bi');
             readln(a,b)                                            ;
             writeln('Ingrese los valores de c y d a modo de c+di');
             readln(c,d);
             clrscr;
             writeln('***Menú de opciones***');
             writeln('1-Sumar');
             writeln('2-Restar');
             writeln('3-Multiplicar');
             writeln('Otro número, sale el programa');
             readln(opc);
             if (opc=1) then
              suma
               else
                 if opc=2 then
                  resta
                   else
                    if opc=3 then multi
                     else 
             {[i]case opc of
             1:suma;
             2:resta;
             3:multi;[/i]}
             end.

            me encanta estorbar sin aportar nada al tema en cuestión
            Outside of a dog, a book is a man's best friend. Inside of a dog, it's too dark to read

            La ficción nos mata, pero la realidad nunca estuvo viva

            Comentario

            • ivius 3
              Registered User
              • 09-02-2006
              • 2117

              #7
              Posta ahi queda mejor, no te puedo ayudar, se c++ y muy poco =S

              Comentario

              • Geus
                Vago sin remedio...
                • 14-12-2004
                • 293

                #8
                lo que te puedo decir... es que lo del case estaria bien.. y creo que quedaria mejor que el if anidado :P

                esta muy prolijo

                continue

                Comentario

                • ánima
                  A tirador láser
                  • 15-02-2004
                  • 7082

                  #9
                  Ahora tengo problemas con archivos de texto, lo que me cuesta es la parte de
                  while not eof do
                  O sea, no entiendo el porqué está ahí, el de eoln lo entiendo, pero si no pongo el de eof el programa compilaria igual, si alguien entiende la necesida de ese eof me lo explicaria?^^

                  EDIT: Creo que entendi, está hecho por si el archivo no está puesto al principio, pero si por ejemplo estaba en la linea 4 y tiene 8, solo va a leer las últimas 4, o sea, es preferible poner un reset, como hice yo, bah me parece no sép
                  Código:
                  program texto1;
                  uses crt;
                  var
                  texto:text;
                  a,b,c:integer;
                  begin
                   clrscr;
                   assign(texto, 'c:\nuevo2.dat');
                   {rewrite(texto);}
                   reset(texto);
                   while not eof(texto) do
                    while not eoln(texto) do
                     {writeln('ingrese el texto');}
                     begin
                      readln(texto,a);
                      {append(texto);}
                      c:=a+c;
                      writeln(a);
                     end;
                   writeln(c);
                   close(texto);
                   readln;
                  end.
                  Editado por última vez por ánima; 26-06-2006, 01:34 PM.

                  Comentario

                  • MoaLaiSkirulais
                    ^^(V)^^
                    • 08-07-2003
                    • 23268

                    #10
                    mas lindo ;l

                    Código PHP:
                    program complejos;
                      uses crt;
                     {[i]type
                       menu=1..4;[/i]}
                      var
                      sR,sI,a,b,c,pip,d:real;
                      opc:integer;
                      {[i]opc:menu;[/i]}
                           procedure suma;
                            begin
                            si:=b + d;
                            sr:=a + c;
                            writeln('El resultado es ',sr:4:3,'+',si:4:3,'i');
                            readln;
                            end;
                    
                            procedure multi;
                            begin
                            sr:=a*c-b*d;
                            si:=a*d+b*c;
                            writeln('El resultado es ',sr:4:3,'+',si:4:3,'i');
                            readln;
                            end;
                    
                            procedure resta;
                            begin
                            si:=b - d;
                            sr:=a - c;
                            writeln('El resultado es(',sr,')+(',si,'i)');
                            readln;
                            end;
                    begin
                     clrscr;
                     writeln('Ingrese los valores de a y b a modo de a+bi');
                     readln(a,b)                                            ;
                     writeln('Ingrese los valores de c y d a modo de c+di');
                     readln(c,d);
                     clrscr;
                     writeln('***Menú de opciones***');
                     writeln('1-Sumar');
                     writeln('2-Restar');
                     writeln('3-Multiplicar');
                     writeln('Otro número, sale el programa');
                     readln(opc);
                     if (opc=1) then
                      suma
                       else
                         if opc=2 then
                          resta
                           else
                            if opc=3 then multi
                             else 
                     {[i]case opc of
                     1:suma;
                     2:resta;
                     3:multi;[/i]}
                     end. 
                    

                    Comentario

                    • ánima
                      A tirador láser
                      • 15-02-2004
                      • 7082

                      #11
                      Chep alguno se le ocurre como hacer esto?
                      Enunciado:
                      Decimos que un número entero positvo es suave si siempre dos cifras consecutivas difieren a los sumo en una unidad [Ejemplo 123456, 33, 122122, 67876]
                      Se pide escribir un programa pascal para números menores que 10000
                      • Guardar en un archivo de texto todos los número primos que son suaves separados por un espacio.
                      • Mostrar en pantalla los número primos quie son suaves separándolos por cantidad de cifras en tres grupos, como se muestra a continuación

                        2 cifras
                        89 67 43 ...

                        3 cifras
                        887 877 787...

                        4 cifras
                        9887 8999
                      • De cada grupo de números, calcular y mostrar en pantalla con un cartel aclaratorio que porcentaje respecto del total de ese grupo, repsenta los que son capicúas.Por Ejemplo porcentaje de número de 2 cifras que son primos, suaves y capicúa respecto del total de números de 2 cifras que son primos y suaves.


                      EDIT:Creo que es el final más difícil de todos, alguien se le ocurre al menos una minima idea? Porque no puedo avanzar =(

                      Comentario

                      • Kpoyo
                        Mandatory rape!
                        • 16-05-2004
                        • 8042

                        #12
                        Lo de los numeros suaves positivos, podrias hacer un STR, y vas comparando mediante trabajar el string como un array, las posiciones de los numeros.
                        cadena:=''
                        str(numero,cadena,code)
                        For i:= 1 to Length(cadena)-1 do
                        Begin
                        nro1:=0
                        nro2:=0
                        val(cadena[i],nro1,code)
                        val(cadena[i+1], nro2, code)
                        if not((nro1+1=nro2) OR(nro1-1=nro2) OR (nro1=nro)) then break
                        if i=length(cadena)-1 then
                        Begin
                        inc(j)
                        suaves[j]:=numero
                        End
                        End
                        despues el algoritmo para primos es muy facil, haces otro for, de step 2 de 3 en adelante hasta numero [o numero DIV 2 y optimizas el codigo].
                        Editado por última vez por Kpoyo; 11-07-2006, 11:16 AM.

                        Comentario

                        • judío ginger daywalker petiso
                          Pelotudo
                          • 14-03-2005
                          • 16758

                          #13
                          okz anima... vos necesitas poder descomponer un numero en digitos, y comparar...
                          una forma facil de chekear "suavidad" es algo asi...

                          si "num" es un entero, el ultimo digito de num lo obtengo asi: "dig := numero mod 10;" (o como sea en pascal la operacion para "resto de division entera").
                          dps haces "numero := parte entera de(numero / 10);".
                          tonces, si "numero" era "1234", ahora numero es "123" y dig es "4".
                          la idea seria asi:
                          Originalmente publicado por codigo
                          (en "num" esta el valor a testear")
                          suave = true
                          udig = num mod 10;
                          num /= 10;
                          mientras (num <> 0 y suave)[
                          sdig = num mod 10;
                          num /= 10;
                          si abs(sdig-udig) es > 1, suave = false
                          sino udig = sdig.
                          ]
                          devolver "suave".
                          tonces: paso 1: armarte un vector con los primos entre 2 y 10000 (ordenados de mayor a menor)
                          paso 2: remover de ese vector los "no suaves" (ya podes imprimir la primer lista)
                          paso 3: recorrela (aprovechando q esta de menor a mayor) y anda imprimiendo. mientras el numero actual sea menor a 10, es de 1 cifra. mientras sea menor a 100, es de dos... como ves, es muy facil, solo tenes que ver cuando se pasa de una potencia de 10, y esperar a que se pase de la siguiente y bla bla bla... (ya tenes la 2da lista)
                          paso 4: mientras haces lo anterior, en otro vector te vas guardando las cantidades contadas hasta pasarse de cada potencia (osea, cuantos numeros hay de cada cant de cifras), y ya tenes la tercera lista.

                          depaso podes comparar como saber utilizar bien un poquito de matematica pedorras te permite no tener que convertir a cadena y operar todo como strings como Que Pollo! sugirio...

                          pd: ojo... el codiquito pedorro de arriba asume que num es una variable entera, y que, por ejemplo, si num vale 5, hacer "num /= 2", te deja num en 2. no en tres, y no en 2.5, sino en 2. [C se comporta de esa manera... si pascal no lo es, utilizar lo adecuado para que la division SEA entera]

                          K
                          Editado por última vez por judío ginger daywalker petiso; 11-07-2006, 11:39 AM.

                          Comentario

                          • Kpoyo
                            Mandatory rape!
                            • 16-05-2004
                            • 8042

                            #14
                            Mucho mejor la solucion de kkkkkk. Yo tiendo a utilizar estas formas de valores porque me cuesta pensar en eso de modulos y divisiones para sacar digitos.

                            PD: Dichos sea de paso, tenes algun titulo de libro que sea interesante y relativamente sencillo para principiantes, de algoritmia? Estoy intentando entrar a las Olimpiadas de programacion, pero no encuentro algo que me sirva en un lenguaje sencillo. Nada intensivo ni eso, algo sencillo y didactico.

                            Comentario

                            • judío ginger daywalker petiso
                              Pelotudo
                              • 14-03-2005
                              • 16758

                              #15
                              las olimpiadas de informatica son geniales como puerta a lo que son las ciencias de la computacion...

                              el primer libro que use para entrenarme fue el "Estructuras de datos y Algoritmos" de Alfred V. Aho, John E. Hopcroft y Jeffrey D. Ullman (conocido como "el aho-ullman", ya q casi todos los libros de algoritmos suelen llamarse iguales o casi iguales).

                              dps use el Sedgewick. este libro se llama "Algoritmos", y tiene distintas versiones, "Algoritmos en C", "Algoritmos en C++", etc. donde varia el lenguaje de los ejemplos, siendo en "Algoritmos" un pseudocodigo pascaloso. este es bastante groso, pero ya tenes que estar preparado para un libro mas "rapido". pero si sabes este libro estas en condiciones decentes para las internacionales de informatica.
                              >> Robert Sedgewick - Algorithms (en ingles) <<

                              Comentario

                              Trabajando...