Recent Posts

Recent Posts

Pages: [1] 2 3 ... 10
1
Primer Año / Re: Programacion en C
« Last post by Zenyatta on July 28, 2020, 04:31:42 am »
Se supone que a este punto tienen un compilador y un editor instalados para poder compilar y ejecutar desde sus lados.

Ejercicio del PSeInt 3

Leer los 5 números que se ingresan por teclado y calcular su promedio.

Codigo | Compilado x64

//Leer los 5 números que se ingresan por teclado y calcular su promedio.

#include <stdio.h> //Declaramos que headers incluir
#include <math.h>


void main() { // Indicamos que la funcion principal (main) no tiene return value (void)
int input, add; // Inicializamos dos ints con signo (int significa interger). Su tamaño en bytes varia segun el compilador.
// En Real-Mode (x16), son 2 bytes. En protected-mode y extended-mode (x32 y x86) son 4 bytes. En long-mode (x64), son 8 bytes.

float average; // Despues inicializamos un float para el promedio. Floats y Doubles son los unicos tipos de datos que nos permiten tener decimales.

add = 0; // Ponemos la suma total en 0.

printf("Sumatoria de cinco numeros.\n\nIngrese el primer numero para sumar: "); // Le escribimos al usuario de que trata el programa.
// \n significa "carriage return, line feed" o "new line". Hay simbolos especiales que, para utilizarlos, se deben escape-ear con la barra \.

scanf("%d",&input); // obtenemos el ingreso del usuario. Scanf tiene dos parametros (y mas opcionales).
// En el string, se pone el formato de ingreso. Con %d, obtenemos un interger con signo, sin decimales.
// En el segundo parametro, ponemos la direccion de la variable donde vamos a guardar el dato. & indica address
// (o la ubicacion de la memoria donde tenemos alojada la variable).

add = add + input; // Despues sumamos el ingreso a la suma total. Repetimos esto cinco veces.

printf("Ingrese el segundo numero para sumar: ");
scanf("%d",&input);
add = add + input;

printf("Ingrese el tercer numero para sumar: ");
scanf("%d",&input);
add = add + input;

printf("Ingrese el cuarto numero para sumar: ");
scanf("%d",&input);
add = add + input;

printf("Ingrese el quinto numero para sumar: ");
scanf("%d",&input);
add = add + input;

average = (float)add / 5; // convertimos la suma total en un float, lo dividimos por el total (cinco) para obtener el promedio
//y lo almacenamos en la variable average.

average = roundf(average*100); // Redondeamos a 2 decimales corriendo la coma dos lados
average = average / 100; // Corremos la coma 2 lados
input = trunc(average); // Luego recortamos todos los decimales
//printf("%f",average);

if(average == input) //verificamos si el numero tiene decimales (comparando el numero truncado con si mismo)
printf("\nLa sumatoria de los numeros ingresados es %d\nEl promedio es %d\n\n", add, input); // si no tiene decimales, mostrarlo en el printf como int
else
printf("\nLa sumatoria de los numeros ingresados es %d\nEl promedio es %.2f\n\n", add, average); // si tiene decimales, mostrarlo en el printf como float

system("PAUSE"); // ejecutamos un comando de sistema, "PAUSE" en este caso. Si no estuviera esta linea, en cuanto el programa termine, se cierra.
// PAUSE pide que el usuario toque una tecla para continuar (en este caso, continuar al fin del programa y cerrarlo).
} // FInal definitivo del programa


En este codigo, utilizo dos headers (o bibliotecas standard) de C. stdio.h y math.h.
stdio significa Standard I/O (Input/Output). Nos permite utilizar funciones que envian y reciben datos de la consola. printf(); y scanf(); provienen de ahi.
math nos brinda funciones matematicas avanzadas. En este caso, la funcion trunc(); viene de math.h

Inicializamos dos ints con signo (int significa interger). Su tamaño en bytes varia segun el compilador. En Real-Mode (x16), son 2 bytes. En protected-mode y extended-mode (x32 y x86) son 4 bytes. En long-mode (x64), son 8 bytes.

Despues inicializamos un float para el promedio. Floats y Doubles son los unicos tipos de datos que nos permiten tener decimales.

Ponemos la suma total en 0.

Le escribimos al usuario de que trata el programa. \n significa "carriage return, line feed" o "new line". Hay simbolos especiales que, para utilizarlos, se deben escape-ear con la barra \. Si no tuvieramos la barra, se mostraria una n normal. La barra permite al programa interpretarlo como un enter. De los mas frecuentes, estan:
\n - new line
\t - tab
\0 - null character (importantisimo en strings)
\\ - Muestra la barra (muestra solo una)

scanf();
Con scanf, obtenemos el ingreso del usuario. Scanf tiene dos parametros (y mas opcionales). En el string, se pone el formato de ingreso. Con %d, obtenemos un interger con signo, sin decimales. En el segundo parametro, ponemos la direccion de la variable donde vamos a guardar el dato. & indica address (o la ubicacion de la memoria donde tenemos alojada la variable).

Despues sumamos el ingreso a la suma total. Repetimos esto cinco veces.

En la linea 33, convertimos la suma total en un float, lo dividimos por el total (cinco) para obtener el promedio, y lo almacenamos en la variable average.
Luego recortamos todos los decimales menos dos y verificamos si el numero tiene decimales (comparando el numero truncado con si mismo). Si tiene decimales, mostrarlo en el printf como float. Si no, mostrarlo como un interger comun.

Aca ejecutamos un comando de sistema, "PAUSE" en este caso. Si no estuviera esta linea, en cuanto el programa termine, se cierra. PAUSE pide que el usuario toque una tecla para continuar (en este caso, continuar al fin del programa y cerrarlo).


2
Primer Año / Re: Introduccion a la Programacion - PSeInt y los ejercicios!
« Last post by Zenyatta on June 23, 2020, 04:04:59 pm »
dasdasd
3
Primer Año / Re: Introduccion a la Programacion - PSeInt y los ejercicios!
« Last post by Zenyatta on June 18, 2020, 07:10:26 pm »

Ejercicio 50
Link de descarga

Dado un vector con N elementos, buscar los dos elementos mayores.


// Dado un vector con N elementos, buscar los dos elementos mayores.

Algoritmo sin_titulo

Escribir "Dos elementos mayores de Array N";
Escribir "";

Definir max, max1, max2, i como ENTERO;
max1 = 0;
max2 = 0;

Repetir
Escribir "Ingrese el maximo del array " SINSALTAR;
Leer max;

Si max <= 1 Entonces
Escribir "El N debe ser mayor a uno.";
Escribir "";
FinSi
Hasta Que max > 1

Dimension Array[max];

Para i = 0 Hasta max-1 Hacer
Array[i] = ALEATORIO(0,255);
FinPara

Para i = 1 Hasta max-1 Hacer
Si i = 1 Entonces
max1 = Array[0];
max2 = Array[1];
FinSi

Si Array[i] > max1 Entonces
max2 = max1;
max1 = Array[i];
SiNo
Si Array[i] > max2 Entonces
max2 = Array[i];
FinSi
FinSi

FinPara

//Para i = 0 Hasta max-1 Hacer
// Escribir Array[i];
//FinPara

Escribir "";
Escribir "El numero mas grande es ", max2;
Escribir "El numero mas grande que el mas grande es ", max1;

FinAlgoritmo


^ Arriba ^
4
Primer Año / Re: Introduccion a la Programacion - PSeInt y los ejercicios!
« Last post by Zenyatta on June 18, 2020, 07:09:42 pm »
45-49
5
Primer Año / Re: Introduccion a la Programacion - PSeInt y los ejercicios!
« Last post by Zenyatta on June 18, 2020, 07:09:26 pm »
41-45
6
Primer Año / Re: Sistemas Numericos
« Last post by Zenyatta on June 07, 2020, 02:57:44 pm »
Suma, Resta, y Multiplicacion Hexadecimal

Suma Binaria

La suma hexadecimal es medio engorrosa. Como el hexadecimal va de 0 a la F, hay que prestar atencion cuando ocurre un overflow o un underflow.

Teniendo la siguiente operacion:

 0x13
+0x1F


Procedemos como una suma normal PERO RECORDANDO que en esta base, el numero maximo es F.

Como me informaron, no se contar, entonces la foto esta mal. Fijense que 18/16 da resto 2, no 3. El resultado es 0x32. El procedimiento esta bien

Recuerden que si pasan el 15, hay que restar 16 y sumarle 1 al digito siguiente (como en el decimal con el 10, aca con el 16)!

^ Arriba ^

Multiplicacion Binaria

La multiplicacion hexadecimal es igual a la decimal pero en base 16. Es notablemente mas engorrosa para resolver.
Suponiendo el siguiente ejercicio:

    0111
*   0100
    0000
   0000
  0111
+0000
11100
pasando a byte:
001 1100

 0111
*0100
011100
pasando a byte:
001 1100

^ Arriba ^

Resta Hexadecimal


La resta hexadecimal es igual a la resta decimal. Cuando ocurre un underflow, se le suma 16 al numero que le estan restando mas de lo que tiene
7
Primer Año / Re: Sistemas Numericos
« Last post by Zenyatta on June 07, 2020, 11:44:07 am »
Informacion Util

Conversion de Bases
Para convertir un numero a hexadecimal y a octal, conviene primero pasarlo a binario y dividirlo cada 4 bits para hex o cada 3 bits para oct.

Ejemplo:

DEC 1337
BIN 0101 0011 1001

Ahora, lo pasamos a Octal de la siguiente manera:

BIN 0101 0011 1001
BIN 010 100 111 001
OCT  2   4   7   1
OCT 2471
Al tener los numeros divididos cada tres bits, uno puede trabajar directamente con cada trio por separado y juntar el numero final.Ahora, lo pasamos a Hexadecimal con el mismo metodo pero dividiendo cada cuatro:

BIN 0101 0011 1001
HEX 5    3    9
HEX 539
Esta regla es valida para todos los numeros.

Uno se preguntaria (pero la gran mayoria no ¯\_(ツ)_/¯) por que 3 con el octal y 4 con el hexadecimal? La respuesta es simple. El Octal tiene rango del 0 al 7. Los primeros tres bits suman 7. Lo mismo para el hexadecimal. Tiene rango de 0 a la F (o al 15) y los primeros cuatro bits suman 15.

^ Arriba ^

Divisiones Succesivas de 2

Esta es una forma simple. Se agarra un numero y se lo divide por 2. Si la division no tiene decimales, se anota un cero. Si lo tiene, se anota un uno y se descartan los decimales para la siguiente operacion. Al finalizar, se deben INVERTIR EL ORDEN de los bits.

Ejemplo:
420
420/2 = 210
210/2 = 105
105/2 = 52.5
52/2 = 26
26/2 = 13
13/2 = 6.5
6/2 = 3
3/2 = 1.5
1/2 = 0.5
0
_
0
0
1
0
0
1
0
1
1
________69
69/2 = 34.5
34/2 = 17
17/2 8.5
8/2 = 4
4/2 = 2
2/2 = 1
1/2 = 0.5
0
_
1
0
1
0
0
0
1

Invirtiendo el orden de los bits obtenemos:
420 -> 110100100-> 0001 1010 0100
69 -> 1000101 -> 0100 0101
Es un metodo engorroso, no lo recomiendo.

Restas Succesivas de Potencias de 2
Este es el metodo mas rapido y directo (mi favorito <3)

Se deben saber la tabla de los bits, mostrada a continuacion. Yo personalmente me acuerdo hasta el 16 pero no tienen por que saberse tantos. Los primeros 8 alcanzan. Para los demas, usen una calculadora directamente. Total, la mayoria leyendo esto hace 7+5 con la calculadora de todos modos.
Bit NumeroValor del Bit______Bit NumeroValor del Bit
0
20 = 1
______
8
28 = 256
1
21 = 2
______
9
29 = 512
2
22 = 4
______
10
210 = 1024
3
23 = 8
______
11
211 = 2048
______
4
24 = 16
______
12
212 = 4096
5
25 = 32
______
13
213 = 8192
6
26 = 64
______
14
214 = 16384
7
27 = 128
______
15
215 = 32768
16 -> 216 = 65536

Sabiendo esto, procedemos a la conversion.

Se agarra un numero en decimal y se le resta el bit mas grande que se pueda SIN TENER UN RESULTADO NEGATIVO. Si se puede restar, se anota un uno. De lo contrario, un cero.
1337
1337-1024 = 313
1
1337 (512)
0
313-256 = 57
1
57 (128)
0
57 (64)
0
57-32 = 25
1
25-16 = 9
1
9-8 = 1
1
1 (4)
0
1 (2)
0
1-1 = 0
1
Obtenemos 10100111001. Agrupando, 0101 0011 1001.
Para pasar de vuelta al decimal, hacemos la siguiente operacion matematica (suponer Nb como el valor (N) del numero del bit (b)):
211 * 011 + 210 * 110 + 29 * 09 + 28 * 18 + 27 * 07 + 26 * 06 + 25 * 15 + 24 * 14 + 23 * 13 + 22 * 02 + 21 * 01 + 20 * 10
2048 * 0 + 1024 * 1 + 512 * 0 + 256 * 1 + 128 * 0 + 64 * 0 + 32 * 1 + 16 * 1 + 8 * 1 + 4 * 0 + 2 * 0 + 1 * 1

1024 + 256 + 32 + 16 + 8 + 1 = 1337


Como podran ver, es un metodo sencillo y rapido!

^ Arriba ^

Ejercitacion de Practica

Pasaje de Numeros (tengo que subir todo esto todavia, no le den bola)
Sumas y Restas
Multiplicaciones
Pasaje a Float-Point de 32bits



Suma, Resta, y Multiplicacion Binaria

Suma Binaria

La suma binaria es simple. Primero, uno debe entender el concepto de "overflow". Overflow es cuando el numero se pasa del maximo e intenta pasarle ese exceso al numeri siguiente. Un buen ejemplo de un overflow es el odometro de un auto viejo, donde cuando llega a 999, pasa a 1000 pero si solo tiene tres rueditas en el tablero, se pone en 000. El underflow es lo mismo pero para el otro lado. 001 se convertiria en 000 y luego 999.

Teniendo la siguiente operacion:

 0100 1101
+0011 0001


Procedemos como una suma normal PERO RECORDANDO que en esta base, el numero maximo es 1. Los sistemas numericos que veremos tienen los siguientes rangos por digito:
Binario
0-1
Octal
0-7
Hexadecimal
0-F (A = 10, B = 11, etc)

Como nuestro numero maximo en binario es 1, y estamos sumandole 1 a 1, se convierte en 10 porque realiza un overflow. Repitiendo esta regla para los otros digitos del numero, obtenemos el siguiente resultado:


^ Arriba ^

Multiplicacion Binaria

La multiplicacion binaria es relativamente simple porque si el digito es 1, pones el numero. Si es 0, no lo pones.

Suponiendo el siguiente ejercicio:

    0111
*   0100
    0000
   0000
  0111
+0000
11100
pasando a byte:
001 1100

 0111
*0100
011100
pasando a byte:
001 1100
Al poner el numero solo si es 1 el digito o nada si es 0, la multiplicacion es muy facil. Solo se debe sumar despues. Al igual que en la multiplicacion convencional en la base decimal, debemos correr los numeros a la derecha correspondiendo con la posicion del digito que multiplicamos con.
En este ejemplo, como el primer 1 del segundo factor esta en la tercera posicion, debemos correr el numero dos lugares. Se puede simplificar las lineas con solo cero pero aca las pongo para que se les haga mas simple entender el concepto.

Hay que acostumbrarse a trabajar con grupos de bits asi no cometemos errores por leer mal. Lo mas conveniente es dividir cada 4 bits para no tener tantos grupos y, mas importante, poder pasarlo a hexadecimal facilmente ya que es el sistema numero mas utilizado en la programacion. Haganme caso ;D

^ Arriba ^

Resta Binaria

Aca se nos complica un poco la cosa. Para la resta binaria, debemos aprender primero sobre los numeros negativos binarios. De lo contrario, solo podremos restar numeros que sean mas chicos.

Complemento a 1 y Complemento a 2

El complemento a 2 surgio del complemento a 1. La teoria es la siguiente:
Existen distintos tipos de datos en la programacion:
NombresRangoCantidad de Bits
Boole0-11
Unsigned Byte
0-2558
Unsigned Word
2 Bytes
0-6553516
Unsigned Double Word
4 Bytes
0-4,294,967,29632
Unsigned Quad Word
8 Bytes
0-18,446,744,073,709,551,61564

Y sus variantes CON signo:
_____________
Nombres
____________________________________________________________
Rango
__________________________________
Cantidad de Bits
Byte
-128 - 1278
Word
2 Bytes
-32768 - 3276716
Double Word
4 Bytes
-2,147,483,648 - 2,147,483,64732
Quad Word
8 Bytes
-9,223,372,036,854,775,808 - 9,223,372,036,854,775,80764

Y aca hacemos la diferencia entre C1 y C2 (Complemento a 1 y 2). El Complemento a 1 toma en cuenta el -0 entonces los rangos reales son
_____________
Nombres
____________________________________________________________
Rango
__________________________________
Cantidad de Bits
Byte
-127 - 1278
Word
2 Bytes
-32767 - 3276716
Double Word
4 Bytes
-2,147,483,647 - 2,147,483,64732
Quad Word
8 Bytes
-9,223,372,036,854,775,807 - 9,223,372,036,854,775,80764

Al tomar en cuenta el -0, uno debe diferenciar el C1 del C2 (usado normalmente) para un correcto pasaje.

El primer bit significativo (el de la izquierda de todo en un numero big-endian [los que estamos trabajando actualmente]) de un numero signado significa si es posivito o negativo el numero. En el caso que sea 1, al numero obtenido de los otros bits se le resta el valor de ese bit.

Pasemos -69 a binario con C1 y C2:
__________________________________
Complemento a 1
__________________________________
Complemento a 2
-69 -> 69
1000101
0100 0101
1011 1010

0011 1010 -> 58
58 - 127 -> -69
-69 -> 69
1000101
0100 0101
1011 1010
+1
1011 1011

0011 1011 -> 59
59 - 128 -> -69
Primero pasamos el modulo del numero a binario
Luego, lo dividimos al grupo de 4 siguiente. En este caso, como tenemos 7 bits, lo pasamos a un byte (8 bits)
Invertimos los bits del numero
En el caso del C2, le sumamos 1 al numero (para compensar el -0 que toma en cuenta el C1)
Y ahi obtenemos nuestros numeros signados en C1 y C2. Para pasar a decimal, uno debe pasar el numero EXCLUYENDO EL BIT DEL SIGNO a decimal y RESTARLE 127 PARA C1 O 128 PARA C2.

Una vez entendido como escribir los numeros negativos, podemos proceder a restar en binario.

Suponiendo la siguiente operacion:
________________________________________

9-5
 1001
-0101
0100
Procedemos a restar.
1-1 es 0, 0-0 es 0. Ahora en el tercer digito donde tenemos 0-1, se pone interesante la situacion. De la misma manera que tenemos un overflow en las sumas, aca tenemos un underflow. El 0 le tiene que pedir al de la izquierda un 10 para poder realizar la resta (como en el decimal cuando el digito le pide el de la izquierda 10 para poder restar. El 1 se convierte en 0 y el 0 al que se le esta restando en la tercer posicion, se convierte en 10. 10-1 -> 1. Se baja un uno. El digito siguiente es cero y ya finalizo el numero, dando por terminada la operacion.

Esta imagen explica lo anterior pero con una cifra mas para mostrar que se puede si hay varios en el medio.


En el caso de restar con numeros negativos, conviene hacer el complemento antes de realizar la resta. Situaciones paralelas:
________________________________________
-12 - 3

3 -> 0011

C2 al -12
-12 -> 12
12 -> 1100*
1100 -> 1111 0011
1111 0011 + 1 -> 1111 0100

 1111 0100
-0000 0011
1111 0001 ->
________________________________________
-12 - 3

3 -> 0011

-12 -> 12
12 -> 1100

 1100
-0011
1001
C2
1111 0110
+1
1111 0111 -> -9
*Como el 12 ya utiliza el primer numero del grupo, conviene extender el numero al siguiente grupo de 4. Tecnicamente se podria operar igual pero es mas confuso (en mi opinion ¯\_(ツ)_/¯)

Matematicamente, hacer el C2 DESPUES de la resta es hacer la operacion 12-3. Es un error de principiante que vi bastante seguido. Lo mas seguro es convertir los numeros al C2 antes de operar. Si realmente queres hacerlo despues de operar, tenes que invertir los signos operacionales. El - debe ser + porque -12 - 3 es igual a -(12+3).

^ Arriba ^

Negativos por Exceso 2n-1

Para realizar este metodo de conversion al binario, se debe establecer con cuantos bits uno quiere trabajar con de antemano. Vamos a trabajar con 8.

Se agarra el numero en decimal, se le suma el valor del bit del signo (en el caso de 8 bits, 128) y se saca el numero en binario de la manera normal.
Cuando se obtiene el numero, el bit del signo se cambia para corresponder con el signo real del numero. Ejemplos:
-69
-69 + 128 = 59
59 (128)
59 (64)
59-32 = 27
27-16 = 11
11-8 = 3
3 (4)
3-2 = 1
1-1 = 0
_
_

0
0
1
1
1
0
1
1
______123
123 + 128 = 251
251-128 = 123
123-64 = 59
59-32 = 27
27-16 = 11
11-8 = 3
3 (4)
3-2 = 1
1-1 = 0
_
_

1
1
1
1
1
0
1
1

Obtenemos los siguientes resultados:

-69 -> 00111011 -> 0011 1011
123 -> 11111011 -> 1111 1011

Pero son incoherentes esos resultados porque el signo negativo esta en 1. Cambiamos el signo para que sea el correspondiente:

-69 -> 1011 1011
123 -> 0111 1011

Y ahi tenemos los resultados correctos!



CUALQUIER DUDA, LA MAS TETONUDA NO TENGAS MIEDO DE PREGUNTAR POR PM O POR DISCORD!

^ Arriba ^
8
Primer Año / Re: Introduccion a la Programacion - PSeInt y los ejercicios!
« Last post by Zenyatta on June 01, 2020, 01:39:03 pm »
Parcial 22/05/2020

Parcial 2-A
Link de descarga

Se tiene una empresa chica con 10 empleados. Se necesita saber cuántos hijos tiene cada empleado para realizar la compra del Día del Niño. Se ingresará por teclado el apellido del empleado y la cantidad de hijos que tiene. Validar cantidad de hijos mayor o igual a 0. Al terminar la carga, se mostrará en
pantalla, toda la información cargada en forma de dos columnas. Además, mostrar cuánto se gastaría en total por los regalos si se compraran regalos a 300
pesos cada uno para los empleados con tres o más hijos y 500 cada regalo para los que tienen uno o dos hijos.

Pista: realizar dos arreglos, uno para empleados y otro para hijos

Desafío extra: mostrar la información en forma separada, primero los empleados
con muchos hijos y luego los empleados con uno o dos hijos.

Algoritmo sin_titulo

Definir max, Total, i como ENTERO;
max = 10;
Dimension Empleados[max], Hijos[max];

Escribir "Regalos del Dia del Niño";
Escribir "";

Para i = 0 Hasta max-1 Hacer //Ingreso de los empleados

Escribir "Ingrese el apellido del empleado.";
Leer Empleados[i];
Hijos[i] = -1;

Mientras Hijos[i] < 0 Hacer

Escribir "Ingrese la cantidad de hijos que tiene";
Escribir "el empleado ", Empleados[i] SINSALTAR;

Leer Hijos[i];

Si Hijos[i] < 0 Entonces //Validar que el ingreso sea mayor o igual a cero.
Escribir "La cantidad de hijos es invalida. Debe ser mayor o igual a cero.";
FinSi
Escribir "";
FinMientras
FinPara

Escribir "Trabajador | Costo de Regalos";
Para i = 0 Hasta max-1 Hacer
Si Hijos[i] >=3 Entonces
Escribir Empleados[i], " | $", Hijos[i]*300;
Total = Total + Hijos[i]*300;
FinSi
FinPara

Escribir "";

Para i = 0 Hasta max-1 Hacer
Si Hijos[i] <3 Entonces
Escribir Empleados[i], " | $", Hijos[i]*500;
Total = Total + Hijos[i]*500;
FinSi
FinPara


Escribir "Costo total para la empresa: ", Total;

FinAlgoritmo

^ Arriba ^



Parcial 2-B
Link de descarga

b) Se quiere reformar un local de comidas para llevar y ofrecer la posibilidad de
comer ahí dentro también. El arquitecto presenta un presupuesto que consta de
varios ítems (mesas, sillas, etc.) y el costo correspondiente. Estos datos se
ingresarán por teclado. Al terminar la carga, se mostrará por pantalla toda la
información cargada en forma de dos columnas. Además, mostrar cuánto se
gastaría en total agregando un 10% más de honorarios.

Pista: utilizar dos arreglos para guardar los datos

Desafío extra: mostrar la información en orden inverso al ingresado, ya
calculando el 10% de honorarios sobre cada ítem.

Algoritmo sin_titulo

Definir max, i como ENTERO;
Definir total como REAL;
max = 4;

Dimension Objetos[max], Costos[max];

Escribir "Reforma de un Restaurante";
Escribir "";

Para i = 0 Hasta max-1 Hacer

Escribir "Ingrese el nombre del item.";
Leer Objetos[i];
Costos[i] = -1;

Mientras Costos[i] < 0 Hacer

Escribir "Ingrese el costo de ", Objetos[i] SINSALTAR;

Leer Costos[i];

Si Costos[i] <= 0 Entonces
Escribir "El costo debe ser mayor a cero.";
FinSi
Escribir "";
FinMientras
FinPara

Escribir "Objeto | Costo | Honorario del 10% | Costo Total";
Total = 0;
Para i = max-1 Hasta 0 Con Paso -1 Hacer
Escribir Objetos[i], " | $" Costos[i], " | $", Costos[i]*0.1, " | $", Costos[i]*1.1;
Total = Total + Costos[i]*1.1;
FinPara
Escribir "";
Escribir "El costo total seria de $", Total;
FinAlgoritmo

^ Arriba ^



Parcial 2-C
Link de descarga

c) Una empresa de electricidad está ofreciendo un plan de pagos para aquellos
usuarios que tengan deuda. Se harán cinco planes, cada uno con diferentes
características. Para cada plan se ingresará el nombre del plan y el monto
máximo de deuda al cual se aplica. Al terminar la carga, se mostrará por pantalla
toda la información cargada en dos columnas. Además, mostrar el plan con el
monto máximo de deuda.

Pista: utilizar dos arreglos para guardar los datos

Desafío extra: Mostrar una tercera columna con el monto de cada cuota a pagar
si se ofrecieran 12 cuotas sin interés.

Algoritmo sin_titulo
Definir max, i como ENTERO;
max = 5;
Dimension Plan[max], Deuda[max];

Escribir "Plan de Pagos de EdeNor";
Escribir "";

Para i = 0 Hasta max-1 Hacer

Escribir "Ingrese el nombre del plan.";
Leer Plan[i];
Deuda[i] = -1;

Mientras Deuda[i] < 0 Hacer

Escribir "Ingrese la deuda maxima del plan ", Plan[i], " ";

Leer Deuda[i];

Si Deuda[i] <= 0 Entonces
Escribir "La deuda debe ser mayor a cero.";
FinSi
Escribir "";
FinMientras
FinPara

Escribir "Plan | Maximo de Deuda | Costo de Cuota (12 cuotas sin interes)";
Para i = 0 Hasta max-1 Hacer
Si i == 0 Entonces
max = i;
SiNo
Si Deuda[i] > Deuda[max] Entonces
max = i;
FinSi
FinSi
Escribir Plan[i], " | $", Deuda[i], " | $", TRUNC(Deuda[i]/12)
FinPara
Escribir "El plan de mayor deuda es el plan ", Plan[max], " con una deuda de $", Deuda[max];

FinAlgoritmo

^ Arriba ^



Parcial 2-D
Link de descarga

d) En un club de barrio, los chicos practican cinco deportes: futbol, basquet, tennis,
natación y judo. Se ingresarán por teclado la información de cada uno de estos
deportes, qué deporte y cuántos chicos lo practican. Al terminar de cargar toda la
información, se mostrará por pantalla toda la información cargada en dos
columnas. Además, mostrar cuántos chicos hay en total y cuál es el deporte con
menos jugadores.

Pista: utilizar dos arreglos para guardar los datos

Desafío extra: Mostrar una tercera columna con la cantidad de profesores
necesarios si se estima la ratio de 1 profesor cada 10 chicos.

Algoritmo sin_titulo
Definir max, i como ENTERO;
max = 5;
Dimension Deporte[max], Chicos[max];

Escribir "Censo Deportivo";
Escribir "";

Para i = 0 Hasta max-1 Hacer

Escribir "Ingrese el nombre del deporte.";
Leer Deporte[i];
Chicos[i] = -1;

Mientras Chicos[i] < 0 Hacer

Escribir "Ingrese la cantidad de chicos que asisten a ", Deporte[i], " ";

Leer Chicos[i];

Si Chicos[i] < 0 Entonces
Escribir "La cantidad de chicos asistiendo debe ser mayor positivo.";
FinSi
Escribir "";
FinMientras
FinPara

Escribir "Deporte | Asistencia | Profesores Necesarios";
Para i = 0 Hasta max-1 Hacer
Si i == 0 Entonces
max = i;
SiNo
Si Chicos[i] < Chicos[max] Entonces
max = i;
FinSi
FinSi
Escribir Deporte[i], " | ", Chicos[i], " | ", TRUNC(Chicos[i]/10+1) //Truncamos y sumamos uno porque debe haber por lo menos un profesor
//y no puede haber medio profe por grupo
FinPara
Escribir "El deporte con la menor cantidad de asistencia es el ", Deporte[max], " con una asistencia de ", Chicos[max], " chicos.";

FinAlgoritmo

^ Arriba ^



Parcial 2-E
Link de descarga
Link de descarga para el segundo

Se tiene una empresa chica con 10 empleados que no ha parado de trabajar durante la cuarentena. Se ha decidido que se les dará un aumento para mantener la fidelidad de estos. Se requiere ingresar el apellido de los diez empleados y su salario actual (salario mayor a cero).
El aumento será de 10% para aquellos que ganan más de 300000 pesos y 15% para los que ganen menos. Luego de haber ingresado TODOS los empleados, mostrar en pantalla el apellido y su nuevo salario. También se quiere saber cuánto era el total pagado en salarios hasta ahora y cuánto será con el aumento.

Pista: usar dos arreglos, uno para los apellidos y otro para los salarios.

Desafío extra: al mostrar todos los empleados con su nuevo salario, dividirlos en
dos grupos mostrando primero los que reciben el 15% de aumento y luego los
que reciben el 10%
Algoritmo sin_titulo

Definir i, n, Separados, Long, tmp, max como ENTERO;
Definir tmp2 como CARACTER;

AumentoA = 1.1;
AumentoB = 1.15;
max = 3;
Dimension Empleados[max];
Dimension Sueldo[max];

Escribir "Aumento de sueldo por fidelidad"
Escribir "durante tiempos de pandemia";
Escribir "";

Para i = 0 Hasta max-1 Hacer
Escribir "Ingrese el nombre del empleado: " SINSALTAR;
Leer Empleados[i];
n = -1;
Mientras n < 0 Hacer
Escribir "Ingrese el sueldo actual ", Empleados[i];
Leer n;
Si n < 0 Entonces
Escribir "El sueldo es invalido. Debe ser mayor o igual a cero.";
SiNo
Sueldo[i] = n;
FinSi
FinMientras
Escribir "";
FinPara

Long = 0;

Para i = 0 Hasta max - 1 Hacer
Si LONGITUD(Empleados[i]) > Long Entonces
Long = LONGITUD(Empleados[i]);
FinSi
FinPara

Escribir "------------------------";
Escribir "";
Escribir "Empleado | Sueldo Actual";

i = 0;
Mientras i < max-1 Hacer
Si Sueldo[i] < Sueldo[i+1] Entonces
tmp = Sueldo[i];
tmp2 = Empleados[i];
Empleados[i] = Empleados[i+1];
Empleados[i+1] = tmp2;
Sueldo[i] = Sueldo[i+1];
Sueldo[i+1] = tmp;
i = -1;
FinSi
i = i + 1;
FinMientras

Para i = 0 Hasta max - 1 Hacer
Escribir Empleados[i] SINSALTAR;
Para n = 0 Hasta Long - LONGITUD(Empleados[i]) Hacer
Escribir " " SINSALTAR;
FinPara
Escribir " | ", Sueldo[i];
FinPara

Escribir "";
Escribir "------------------------";
Escribir "";
Escribir "Trabajador | Aumento | Sueldo Final";

Separados = 0;
Para i = 0 Hasta max - 1 Hacer
Si Sueldo[i] > 300000 Entonces
Escribir Empleados[i] SINSALTAR;

Para n = 0 Hasta Long - LONGITUD(Empleados[i]) Hacer
Escribir " " SINSALTAR;
FinPara

Escribir " |   10%   | $", TRUNC(Sueldo[i] * AumentoA);
SiNo
Si Separados == 0 Entonces
Escribir "";
Separados = 1;
FinSi

Escribir Empleados[i] SINSALTAR;

Para n = 0 Hasta Long - LONGITUD(Empleados[i]) Hacer
Escribir " " SINSALTAR;
FinPara

Escribir " |   15%   | $", TRUNC(Sueldo[i] * AumentoB);
FinSi

FinPara

FinAlgoritmo

Algoritmo sin_titulo
Definir TotalN, TotalV, AumentoA, AumentoB como REAL;
Definir i, max como ENTERO;

max = 3;
Dimension Sueldo[max],Empleados[max];
AumentoA = 1.10;
AumentoB = 1.15;

Escribir "Fidelidad durante la cuarentena.";
Escribir "";

Para i = 0 Hasta max-1 Hacer //Ingreso de los empleados

Escribir "Ingrese el apellido del empleado.";
Leer Empleados[i];
Sueldo[i] = -1;

Mientras Sueldo[i] <= 0 Hacer

Escribir "Ingrese el sueldo de ", Empleados[i] SINSALTAR;

Leer Sueldo[i];

Si Sueldo[i] <= 0 Entonces //Validar que el ingreso sea mayor a cero
Escribir "El sueldo es invalido. Debe ser mayor a cero.";
FinSi
Escribir "";
FinMientras
FinPara

Escribir "Empleado | Sueldo Actual | Sueldo Nuevo | Aumento";

Para i = 0 Hasta max - 1 Hacer
Si Sueldo[i] >= 300000 Entonces
TotalV = TotalV + Sueldo[i];
TotalN = TRUNC(TotalN + Sueldo[i]*AumentoA);
Escribir Empleados[i], " | $", Sueldo[i], " | $", TRUNC(Sueldo[i] * AumentoA), " | ", (AumentoA-1)*100, "%";
FinSi
FinPara
Escribir "";
Para i = 0 Hasta max - 1 Hacer
Si Sueldo[i] < 300000 Entonces
TotalV = TotalV + Sueldo[i];
TotalN = TRUNC(TotalN + Sueldo[i]*AumentoB);
Escribir Empleados[i], " | $", Sueldo[i], " | $", TRUNC(Sueldo[i] * AumentoB), " | ", (AumentoB-1)*100, "%";
FinSi
FinPara

Escribir "";
Escribir "Expensas salariales actual: $", TotalV;
Escribir "Expensas salariales nueva: $", TotalN;

FinAlgoritmo

^ Arriba ^
9
Primer Año / Re: Introduccion a la Programacion - PSeInt y los ejercicios!
« Last post by Zenyatta on May 25, 2020, 06:44:21 pm »
Parcial 22/05/2020

Parcial 1-A
Link de descarga

Escribe un algoritmo para transformar grados Fahrenheit a Celsius, sabiendo que la fórmula es: celsius = 5 * (fahr-32) / 9 El usuario ingresará por teclado valores en grados Fahrenheit. El ciclo termina cuando ingrese un valor negativo.

// Escribe un algoritmo para transformar grados Fahrenheit a Celsius, sabiendo que la
// fórmula es:
// celsius = 5 * (fahr-32) / 9
// El usuario ingresará por teclado valores en grados Fahrenheit. El ciclo termina cuando
// ingrese un valor negativo.

Algoritmo sin_titulo
Definir ingreso, grados como REAL;

ingreso = 0;
grados = 0;

Escribir "Parcial de Introduccion a la Programacion";
Escribir "Ejercicio 1 - A";
Escribir "";
Escribir "Ingrese numeros en Farenheit para obtener su valor en Celcius.";
Escribir "Ingresando un valor negativo, se termina el programa.";

Mientras ingreso >= 0 Hacer

Escribir "";
Escribir "Farenheit: " SINSALTAR;
Leer ingreso;

Si ingreso >= 0 Entonces
grados = 5 * (ingreso - 32) / 9; // Sacamos los decimales, dejando unicamente dos.
grados = grados * 100;
grados = TRUNC(grados);
grados = grados / 100;

Escribir "Celcius: ", grados;
FinSi
FinMientras
FinAlgoritmo

^ Arriba ^



Parcial 1-B
Link de descarga

Escribe un algoritmo para listar los valores de convertir los grados Fahrenheit a Celsius, sabiendo que la fórmula es: celsius = 5 * (fahr-32) / 9 Los valores a convertir van de 0 a 100 grados Fahrenheit. No hay interacción con el usuario. Utilizar un ciclo Mientras.

// b) Escribe un algoritmo para listar los valores de convertir los grados Fahrenheit a
// Celsius, sabiendo que la fórmula es:
// celsius = 5 * (fahr-32) / 9
// Los valores a convertir van de 0 a 100 grados Fahrenheit. No hay interacción con el
// usuario. Utilizar un ciclo Mientras

Algoritmo sin_titulo
Definir grados como REAL;
Definir i como ENTERO;

i = 0;
grados = 0;

Escribir "Parcial de Introduccion a la Programacion";
Escribir "Ejercicio 1 - B";
Escribir "";
Escribir "0-100 Farenheit a Celcius";
Escribir "";
Escribir "------INICIO------";

Mientras i <= 100 Hacer

grados = 5 * (i - 32) / 9; // Sacamos los decimales, dejando unicamente dos.
grados = grados * 100;
grados = TRUNC(grados);
grados = grados / 100;
Si i < 10 Entonces
Escribir "Farenheit: 00" i, " | Celcius: ", grados;
SiNo
Si i < 100 Entonces
Escribir "Farenheit: 0" i, " | Celcius: ", grados;
SiNo
Escribir "Farenheit: " i, " | Celcius: ", grados;
FinSi
FinSi
i = i + 1;
FinMientras
Escribir "-------FIN--------";
FinAlgoritmo

^ Arriba ^



Parcial 1-C
Link de descarga

Escribe un algoritmo para listar los valores de convertir los grados Fahrenheit a Celsius, sabiendo que la fórmula es: celsius = 5 * (fahr-32) / 9 Los valores a convertir van desde 0 hasta un valor máximo que el usuario ingresará por teclado. Utilizar un ciclo Mientras.

// c) Escribe un algoritmo para listar los valores de convertir los grados Fahrenheit a
// Celsius, sabiendo que la fórmula es:
// celsius = 5 * (fahr-32) / 9
// Los valores a convertir van desde 0 hasta un valor máximo que el usuario ingresará por
// teclado. Utilizar un ciclo Mientras

Algoritmo sin_titulo
Definir grados como REAL;
Definir i, a, ingreso como ENTERO;

i = 0;
a = 0;
ingreso = 0;
grados = 0;

Escribir "Parcial de Introduccion a la Programacion";
Escribir "Ejercicio 1 - C";
Escribir "";
Escribir "0-X Farenheit a Celcius";
Escribir "";
Escribir "Ingrese un numero mayor a 0 para obtener";
Escribir "las temperaturas en Celcius desde 0 hasta ese numero: " SINSALTAR;

Mientras !(ingreso > 0) Hacer
Si a == 1 Entonces
Escribir "El numero ingresado es invalido.";
Escribir "Ingrese un numero mayor a cero.";
SiNo
a = 1;
FinSi

Leer ingreso;

Escribir "";
FinMientras

Escribir "------INICIO------";

Mientras i <= ingreso Hacer

grados = 5 * (i - 32) / 9; // Sacamos los decimales, dejando unicamente dos.
grados = grados * 100;
grados = TRUNC(grados);
grados = grados / 100;

Si i < 10 Entonces
Escribir "Farenheit: 00" i, " | Celcius: " SINSALTAR;
SiNo
Si i < 100 Entonces
Escribir "Farenheit: 0" i, " | Celcius: " SINSALTAR;
SiNo
Escribir "Farenheit: " i, " | Celcius: " SINSALTAR;
FinSi
FinSi

Si TRUNC(grados) == grados Entonces
Escribir grados, ".00";
SiNo
Si TRUNC(grados*10) == grados*10 Entonces
Escribir grados, "0";
SiNo
Escribir grados;
FinSi
FinSi

i = i + 1;
FinMientras
Escribir "-------FIN--------";
FinAlgoritmo

^ Arriba ^



Parcial 1-D
Link de descarga

Escribe un algoritmo para listar los valores de convertir los grados Fahrenheit a Celsius, sabiendo que la fórmula es:celsius = 5 * (fahr-32) / 9 Los valores a convertir van desde un valor que el usuario ingresará por teclado hasta 100 grados. Utilizar un ciclo repetir

// d) Escribe un algoritmo para listar los valores de convertir los grados Fahrenheit a
// Celsius, sabiendo que la fórmula es:
// celsius = 5 * (fahr-32) / 9
// Los valores a convertir van desde un valor que el usuario ingresará por teclado hasta
// 100 grados. Utilizar un ciclo repetir

Algoritmo sin_titulo
Definir grados como REAL;
Definir i, a como ENTERO;

i = 100;
a = 0;
grados = 0;

Escribir "Parcial de Introduccion a la Programacion";
Escribir "Ejercicio 1 - D";
Escribir "";
Escribir "X-100 Farenheit a Celcius";
Escribir "";
Escribir "Ingrese un numero menor a 100 para obtener";
Escribir "las temperaturas en Celcius hasta 100 desde ese numero: " SINSALTAR;

Mientras !(i < 100) Hacer
Si a == 1 Entonces
Escribir "El numero ingresado es invalido.";
Escribir "Ingrese un numero menor a cien.";
SiNo
a = 1;
FinSi

Leer i;

Escribir "";
FinMientras

Escribir "------INICIO------";

Repetir

grados = 5 * (i - 32) / 9; // Sacamos los decimales, dejando unicamente dos.
grados = grados * 100;
grados = TRUNC(grados);
grados = grados / 100;

Si i < 0 Entonces
Si i*(-1) < 10 Entonces
Escribir "Farenheit: -00" i*(-1), " | Celcius: ", grados;
SiNo
Si i*(-1) < 100 Entonces
Escribir "Farenheit: -0" i*(-1), " | Celcius: ", grados;
SiNo
Escribir "Farenheit: " i, " | Celcius: ", grados;
FinSi
FinSi
SiNo
Si i < 10 Entonces
Escribir "Farenheit:  00" i, " | Celcius: ", grados;
SiNo
Si i < 100 Entonces
Escribir "Farenheit:  0" i, " | Celcius: ", grados;
SiNo
Escribir "Farenheit:  " i, " | Celcius: ", grados;
FinSi
FinSi
FinSi

i = i + 1;
Hasta Que i > 100;
Escribir "-------FIN--------";
FinAlgoritmo

^ Arriba ^



Parcial 1-E
Link de descarga

Realizar un algoritmo que muestre la sumatoria de los números ingresados por el usuario hasta que éste ingrese un 0 para terminar. No se sabe cuántos números se van a ingresar.

// e) Realizar un algoritmo que muestre la sumatoria de los números ingresados por el
// usuario hasta que éste ingrese un 0 para terminar. No se sabe cuántos números se van a
// ingresar.

Algoritmo sin_titulo
Definir suma, ingreso como ENTERO;
suma = -1;
ingreso = 1;

Escribir "Parcial de Introduccion a la Programacion";
Escribir "Ejercicio 1 - E";
Escribir "Sumatoria de Numeros";
Escribir "";
Escribir "Ingrese un numero para sumarlo.";
Escribir "Ingrese 0 para finalizar.";
Escribir "";

Mientras ingreso > 0 Hacer
suma = suma + ingreso;
Escribir suma, " + " SINSALTAR;
Leer ingreso;
FinMientras

Escribir "";
Escribir "La suma final es: ", suma;

FinAlgoritmo

^ Arriba ^



Parcial 1-F
Link de descarga

Realizar un algoritmo que luego de leer dos números enteros, pregunte que operación básica se quiere hacer, la realice y muestre el resultado. Se adjunta una impresión de pantalla.

// f) Realizar un algoritmo que luego de leer dos números enteros, pregunte que operación
// básica se quiere hacer, la realice y muestre el resultado. Se adjunta una impresión de
// pantalla.

Algoritmo sin_titulo
Definir valido, ingreso, numA, numB como REAL;
Escribir "Parcial de Introduccion a la Programacion";
Escribir "Ejercicio 1 - F";
Escribir "Calculadora";
Escribir "";
Escribir "Ingrese dos numeros enteros para operar con";
Leer numA, numB;
Escribir "";

valido = 0; //Repetir siempre que el usuario ingrese un comando invalido
Mientras valido == 0 Hacer
Escribir "Elija una operacion. Opciones validas:";
Escribir "SUMA RESTA DIVISION MULTIPLICACION";
Leer ingreso

Segun ingreso Hacer
caso "SUMA": Escribir numA, " + ", numB, " = ", numA + numB; valido = 1;
caso "RESTA": Escribir numA, " - ", numB, " = ", numA - numB; valido = 1;
caso "DIVISION": Escribir numA, " / ", numB, " = ", numA / numB; valido = 1;
caso "MULTIPLICACION": Escribir numA, " * ", numB, " = ", numA * numB; valido = 1;
FinSegun

Si valido == 0 Entonces
Escribir "El ingreso es invalido.";
Escribir "";
FinSi

FinMientras

FinAlgoritmo

^ Arriba ^
10
Primer Año / Re: Introduccion a la Programacion - PSeInt y los ejercicios!
« Last post by Zenyatta on May 12, 2020, 07:11:48 pm »

Simulacro 2 - A
Link de descarga

//Ingresar por teclado 10 números enteros guardándolos en un arreglo.
//Luego, mostrar cuál es el mayor y en qué orden fue leído. Para
// terminar, mostrar todo el vector.
// Los números pueden ser positivos, negativos o cero.

Algoritmo Simulacro_2A

Escribir "Mayor del Array";
Escribir "";

max = 10;
Dimension array[10];

Escribir "Por favor, ingrese un numero a la lista."
i = 0;
maxPos = 0;
maxNum = 0;

Mientras i < max Hacer

Leer array[i];

Si i == 0 Entonces
maxPos = i;
maxNum = array[i];
SiNo
Si array[i] > maxNum Entonces
maxPos = i+1;
maxNum = array[i];
FinSi
FinSi

i = i + 1;

Escribir "";

Si i < max Entonces
Escribir "Ingrese otro numero. Faltan ", max-i;
FinSi



FinMientras

Escribir "El numero mas grande es ", maxNum;
Escribir "en la posicion ", maxPos, ".";

Para i = 0 Hasta 9 Hacer
Escribir "Array[",i,"] = ",array[i];
FinPara
FinAlgoritmo

^ Arriba ^



Simulacro 2 - B
Link de descarga

// Ingresar por teclado 10 números enteros guardándolos en un arreglo.
// Luego, mostrar cuál es el menor y en qué orden fue leído. Para
// terminar, mostrar todo el vector.
// Los números pueden ser positivos, negativos o cero

Algoritmo Simulacro_2B

max = 10;
Dimension array[max];

Escribir "Menor de una serie.";
Escribir "";
Escribir "Por favor, ingrese un numero para agregarlo a la serie.";

i = 0;
minNum = 0;
minPos = 0;

Mientras i < max Hacer
Escribir "";

Leer array[i];

Si i < max Entonces
Escribir "Ingrese otro numero. Faltan ",max - i;
FinSi

i = i + 1;

FinMientras

Para i = 0 Hasta max-1 Hacer
Si i == 0 Entonces
minNum = array[i];
minPos = i;
SiNo
Si array[i] < minNum Entonces
minNum = array[i];
minPos = i;
FinSi
FinSi
FinPara

Escribir "";
Escribir "El numero mas chico ingresado es ", minNum;
Escribir "en la posicion ", minPos + 1;
Escribir "";

Para i = 0 Hasta max-1 Hacer
Escribir "Array[",i,"] = ",array[i];
FinPara

FinAlgoritmo

^ Arriba ^
Pages: [1] 2 3 ... 10

PILAR EL TIEMPO