Algoritmo en matlab

¿Podrías ayudarme con un algoritmo que me tiene loca?, el algoritmo es el siguiente:
Escribir un programa en matlab que lea un número entero, dibujando si es par con el propio número un cuadrado, y si fuera impar un triángulo. Los siguientes ejemplos muestran el resultado para el 4 y el 3.
4444                              
4444                       1
4444                      12
4444                     123
He conseguido hacer la primera parte del algoritmo, la del cuadrado, pero es que el triángulo lo tengo muy atragantado y no me sale de ninguna manera.

1 Respuesta

Respuesta
1
Claro que te puedo ayudar. El problema es que matlab lo conozco poco. Hice algunas prácticas hace tiempo y ya no lo uso. Vamos con el algoritmo.
Procedimiento par_impar (numero as entero)
Si numero resto 2 = 0 entonces
  ' Par
  ' Ya lo tienes hecho.
Sino
  ' Impar
  linea = 1
  para i=1 hasta numero hacer
    cadena = ""
    Mientras linea <= i hacer
      cadena = cadena + linea
      linea = linea + 1
    FinMientras
    ImprimirPorPantalla (linea)
  FinPara
Finsi
FinProcedimiento
Siento decirte que si hago lo que tu dices, lo que me sale no es lo que me piden en el algoritmo, sino lo siguiente:
Un num: 3 (que es el nº que introduje para probarlo)
234 (lo que me sale por pantalla tras ejecutar el programa con el nº que introduje)
Muchas gracias de todas formas
No entiendo la salida "234" que comentas. He revisado el algoritmo que te he pasado y la línea "linea = 1" debe de ponerse dentro del para, quedando el algoritmo como:
  para i=1 hasta numero hacer
    linea = 1
    cadena = ""
    Mientras linea <= i hacer
      cadena = cadena + linea
      linea = linea + 1
    finMientras
    imprimirPorPantalla (linea)
  finPara
traza para número = 3:
i=1) linea=1, cadena=""
  Si linea(1) <= i(1) entonces cadena=1, linea = 2 por lo que imprimirPorPantalla (1)
i=2) linea=1, cadena=""
  Si linea(1) <= i(2) entonces cadena=1, linea = 2
  Si linea(2) <= i(2) entonces cadena=12, linea = 3 por lo que imprimirPorPantalla (12)
i=3) linea=1, cadena=""
  Si linea(1) <= i(3) entonces cadena=1, linea = 2
  Si linea(2) <= i(3) entonces cadena=12, linea = 3
  Si linea(3) <= i(3) entonces cadena=123, linea = 4 por lo que imprimirPorPantalla (123)
Según lo que me has dicho, traducido al matlab sería :
a=input('un numero: ');      (para que guarde en a el numero que introduces)
if mod(a,2)==1
for i=1:a
    linea=1;
    cadena=('%d');            (para que guarde en cadena un número)
    while linea<=i
        cadena=cadena+linea;
        linea=linea+1;
    end
    fprintf('%d',linea);          (para que te lo escriba por pantalla)
end
end
Y lo que me sigue saliendo por pantalla al ejecutarlo es:
>> u2
Un numero: 3
234>>
Así que sigo en las mismas... :S:S
Prueba a poner fprintf('%d', cadena);
en lugar de fprintf('%d',linea);
Hola, sigue sin salir, ahora lo que sale es:
>> u2
Un numero: 3
381014010343106>>
...
Yo he estado intentando hacerlo de otra manera pero solo me sale con el nº 3, de ahí en adelante no me sale. Mi manera es:
a=input('un num: '); 
fprintf('  1\n');
for i=1:a-1
   f=i+1;  
end
fprintf(' %d',1,f-1);
fprintf('\n');
fprintf(' %d',1,f-1,f);
  fprintf('\n');
Saludos
Yo lo he hecho en visual basic y funciona perfectamente por lo que creo que depende del matlab. Adjunto el código por si te sirve, iRespuesta vale el valor introducido por el usuario.
  For i = 1 To iRespuesta
        linea = 1
        cadena = vbNullString
        While linea <= i
            cadena = cadena + CStr(linea)
            linea = linea + 1
        Wend
        Label4.Caption = Label4.Caption + cadena + Chr(10)
    Next
Hola, ¿me podrías explicar que quieren decir las cosas que has puesto?, como verás soy muy novata y no sé que es lo que significa.
Saludos
Lo que te he puesto es la traducción a Visual Basic del algoritmo que te propuse.
IRespuesta es el valor introducido por el usuario, en tu caso "a".
Después hay un bucle for (es un para) desde el valor 1 hasta el valor iRespuesta (por ejemplo 3)
inicializo las variables linea = 1 y cadena = vbNullString (cadena = "")
Bucle while (es un mientras) mientras linea sea menor o igual que i
Concatenación de la variable cadena consigmo misma más el valor de línea. Esto lo hago para concatenar los números: 1, 12, 123, ...
Sumo 1 al valor de la linea
Por último lo que yo he hecho para comprobar que se imprime correctamente he utilizado en visual basic un texto, cosa que tu lo imprimes por pantalla.
No sé si te habré liado o no.
Muchas gracias por todo, la verdad no me ha servido mucho; supongo que era porque no nos estábamos entendiendo bien. Te dejo el algorimto en matlab que ha hecho un compañero de clase que funciona con lo que me pide el enunciado, para ver si era algo parecido a lo que intentabas explicarme. Saludos y perdona por molestarte:
a=input('Introduzca un número: ');
if mod(a,2)==0;
     for i=1:a
          for i=1:a
            fprintf('%d ',a);
          end
        fprintf('\n');
    end
else 
    for i=1:a;
        for b=1:i;
             fprintf('%d ',b);
        end
        fprintf('\n');
    end
end

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas