Logo Studenta

proyecto3-Padini

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

proyecto3-Padini/1/entradasalida1.c
#include <stdio.h> 
int main (void)
{
	int x=7, y=3, z=5;
	printf("x + y + 1 vale %d\n",x+y+1);
	printf("La segunda cuenta es %d\n",z*z+y*45-15*x);
	printf("la tercera cuenta es %d\n",y-2 == (x*3+1)%5);
	printf("la cuarta cuenta es %d\n",y/2*x);
	printf("la quinta cuenta es %d\n",y<x*z);
	return 0;
}
proyecto3-Padini/1/entradasalida2.c
#include<stdio.h>
#include<stdbool.h>
int main (void)
{
	int x=1, y=10, z=8;
	
	printf("x + y + 1 vale %d\n",x+y+1);
	printf("z*z+y*45-15*x vale %d\n",z*z+y*45-15*x);
	printf("y-2 = (x*3+1)%%5 vale %d\n",y-2 == (x*3+1)%5);
	printf("y/2*x vale %d\n",y/2*x);
	printf("y<x*z vale %d\n",y<x*z);
	printf("y<x*z da 0, este es un valor Booleano\n");
	printf("ya que aca se utilizó un <,el 0 representa el False y el 1 True\n");
	return 0;
}
proyecto3-Padini/2/debugging1.c
#include <stdio.h> 
#include <stdbool.h>
int main (void)
{
	int x=0, y=0, z=0; 
	bool w=true, b=true; //los booleanos no llevan scanf
	printf("Ingrese un numero para x:\n");//esta es 
	scanf("%d", &x);//esta es
	printf("Ingrese un numero para y:\n");
	scanf("%d", &y);
	printf("Ingrese un numero para w: \n");
	printf("Ingrese un numero para z:\n");
	scanf("%d",&z);
	printf("Ingrese un numero para b:\n");
	printf("x vale %d, x mod 4 = 0 %d\n",x, x % 4 == 0);//esta es
	printf("x vale %d, x mod 4 = 0 %s\n",x, x % 4 == 0 ? "true" : "false");//esta es "?" es un if y el primer parametro es si me da true (si me da cero me imprime true) y el segundo es si me da false (si me da 1 me da false)
	printf("x vale %d, y vale %d, x + y = 0 %d\n",x,y, (x + y == 0));
	printf("pedazo vale %s\n",(y - x) == ((-1) * z) ? "true" : "false");
	printf("Todo esto vale %s\n",((x+y == 0) && ((y - x) == ((-1) * z))) ? "true" : "false");
	printf("not b vale %d, w vale %d, !b && w ??? %s\n",!b,w,!b && w ? "true" : "false");
	return 0;
}
proyecto3-Padini/3/asignaciona.c
#include <stdio.h>
int main(void)
{
 int x;
 printf("ingrese un valor para x: \n"),
 scanf("%d",&x),
 x=5;
 printf("x=%d\n",x);
 return 0;
}
proyecto3-Padini/3/asignacionb.c
#include <stdio.h>
int main(void)
{
 int x,y;
 printf("ingrese valores para x:\n");
 scanf("%d",&x);
 printf("ingrese un valor para y:\n");
 scanf("%d",&y);
 
 x=x+y;
 printf("el valor de x es:%d y el de y:%d\n",x,y);
 y=y+y;
 printf("el valor de y es:%d y el de x:%d\n", x,y);
 return 0;
}
proyecto3-Padini/3/asignacionc.c
#include <stdio.h>
int main(void)
{
 int x,y;
 printf("ingrese un valor para x:\n");
 scanf("%d",&x)
 printf("ingrese un valor para y:\n");
 scanf("%d",&y);
 y=y+y;
 printf("el valor de y:%d, x=%d" y,x);
 x=x+y;
 printf("el valor de x es:%d y el de y:%d\n",x,y);
 return 0;
}
proyecto3-Padini/4/condicional1ef.c
#include <stdio.h> 
int main (void)
{
	int x;
	int y;
	printf("Ingrese un numero para x:\n");
	scanf("%d", &x);
	printf("Ingrese un numero para y:\n"); 
	scanf("%d", &y);
	if (x>=y)
	{
		printf("x= %d, y= %d:\n",x,y);
		 x=0;
		printf("x= %d, y=%d:\n",x,y);
	}
	else
	{
		printf("x= %d, y= %d:\n",x,y);
		x=2;
		printf("x= %d, y= %d:\n",x,y);
	}
		printf("x=%d, y=%d:\n",x,y);
 return 0;
}
proyecto3-Padini/4/condicionalb.c
#include <stdio.h> 
int main (void)
{
	int x=5,y=4,z=8,m=0;
	printf("x=%d,y=%d,z=%d,m=%d:\n",x,y,z,m);
	if (x<y)
	{
		m=x;
	}
	else
	{
		m=y;
	}
		printf("x=%d,y=%d,z=%d,m=%d:\n",x,y,z,m);
	
	if (m<z)
	{
		m=m;
	}
	
	else 
	{
		m=z;
	}
	return 0;
}
proyecto3-Padini/5/cicloah.c
#include <stdio.h>
int main (void)
{
 int i=0;
 printf("ingrese un numero para i: \n");
 scanf("%d", &i);
 while (i!=0)
 {
 
 i=i-1;
 printf("el numero de i es: %d\n", i);
 }
 
 return 0;
}
/*Devuelve los numeros menores a i, hasta que llega a 0*/
proyecto3-Padini/5/cicloai.c
#include <stdio.h>
int main (void)
{
 int i;
 printf("ingrese un numero para i:%d\n");
 scanf("%d",&i);
 while (i!=0)
 {
 printf("el valor de i es: %d\n", i);
 i=0;
 printf("el valor de i es: %d\n", i);
 }
 
 return 0;
}
/*devuelve un numero aleatorio*/
proyecto3-Padini/5/ciclob1.c
#include<stdio.h>
int main(void)
{
 int x=13, y=3, i=0;
 i=0;
 while (x>=y)
 {
 x=x-y;
 i=i+1;
 printf("el valor de x es: %d\n",x);
 printf("el valor de i es: %d\n", i+1);
 }
 
 return 0;
}
/* lo que hace este ciclo, es restarle el valor de i a la variable x mientras esta sea mayor que i*/
proyecto3-Padini/5/ciclob2.c
#include <stdio.h>
#include <stdbool.h>
int main (void)
{
 int x, i, res;
 printf("ingrese x i res\n");
 scanf("%d %d %d", &x,&i,&res);
 res=1;//True
 i=2;
 while (i<x && res)
 {
 res= res && (x%i!=0);
 i=i+1;
 printf( "x= %d, i= %d, res= %d \n", x, i,res);
 }
 return 0;
 
}
/*este ciclo verifica si un numero es primo*/
proyecto3-Padini/6/entrada.c
#include <stdio.h>
int pedirEntero(void)
{
 int x;
 printf("ingrese un entero para x: \n");
 scanf("%d", &x);
 return x;
}
void imprimeEntero (int x)
{
 printf("el entero es: %d\n",x);
}
int main(void)
{
 int x;
 x = pedirEntero();
 imprimeEntero(x);
 return 0;
}
proyecto3-Padini/6/entradab.c
#include <stdio.h> 
int pedirEntero(void){
int x=5,y=4,z=8,m=0;
printf("x=%d,y=%d,z=%d,m=%d:\n",x,y,z,m);
scanf ("%d,%d,%d,%d", &x, &y, &z, &m);
imprimeEntero(x,y,z,m);
return x;
}
void imprimeEntero (int x, int y, int z, int m)
{
 if(x<y)
{
 m=x;
}
else
{
 m=y;
}
printf("x=%d,y=%d,z=%d,m=%d:\n",x,y,z,m);
if(m<z)
{
}
else
{
 m=z;
}
printf("x=%d,y=%d,z=%d,m=%d:\n",x,y,z,m);
printf("el valor final de la variable es: %d\n", m);
}
int main(){
int x,y,z,m;
x = pedirEntero();
imprimeEntero;
return 0;
}
proyecto3-Padini/6/saludos.c
#include <stdio.h>
void imprimeHola(void)
{
 printf("Hola\n");
}
void imprimeChau(void)
{
 printf("Chau\n");
}
int main (void)
{
 imprimeHola();
 imprimeHola();
 imprimeChau();
 imprimeChau();
 return 0;
}
proyecto3-Padini/Proyecto_3-2020.pdf
Algoritmos y Estructuras de Datos I - Laboratorio
Proyecto 3
Programación imperativa - Programas como transformadores de estados
1. Objetivo
El objetivo de este proyecto es introducir
el concepto de estado y de programas como transformadores de estado;
el modelo computacional imperativo, y sus diferencias con el modelo funcional;
la implementación en lenguaje “C” de programas imperativos vistos en el teórico-práctico.
2. Lenguaje “C”
A lo largo de todo el proyecto, se utilizará el lenguaje C, y algunas herramientas como el
GDB: The GNU Project Debugger, para ayudar a la comprensión del concepto de estado y
del paradigma imperativo.
En el caso del lenguaje “C”, para poder ejecutar un programa, lo vamos a tener que “compilar”, y
de esa manera generamos un archivo binario que podrá ser ejecutada en la computadora.
Cómo compilar en C:
Para compilar un archivo .c escribir en la terminal:
$> gcc -Wall -Wextra -std=c99 miarchivo.c -o miprograma
Para ejecutar escribir:
$> ./miprograma
Para compilar para gdb, agregar el flag -g al momento de compilar .c escribir en la terminal:
$> gcc -Wall -Wextra -std=c99 -g miarchivo.c -o miprograma
3. Ejercicios
1. Entrada/Salida Hace un programa en C, que solicite el ingreso de los valores de las variables
x,y,z, e imprima el resultado de las siguiente expresiones. Completá los resultados de la
tablas para los dos estados dados.
Expresión (x7→7, y7→3, z7→5) (x7→1, y7→10, z7→8)
x + y + 1
z * z + y * 45 - 15 * x
y - 2 == (x * 3 + 1) % 5
y / 2 * x
y < x *z
1
¿En la última expresión, que tipo tiene el resultado en lenguaje “C”?
2. Debugging Utilizá GDB o printf como ayuda y encontrá valores para las variables que
forman el estado:
(x 7→ , y7→ , z7→ , b7→ , w7→ )
de manera que las siguientes expresiones tengan el valor indicado:
Expresión Valor
x
% 4 == 0 True
x + y == 0 && y - x == (-1) * z True
not b && w False
Podes cambiar el programa hecho en el ejercicio anterior, agregando las nuevas expresiones
booleanas.
3. Asignaciones
a) Tradućı al lenguaje C los programas 1.a, 1.b y 1.c del práctico que se encuentra en este
enlace. Esos programas están escritos en un pseudocódigo de la materia y la traducción
a C no siempre es directa.
El estado σ0 debe solicitarse al usuario utilizando el comando scanf(). Luego, ejecute
cada programa 3 veces con diferentes valores de las variables solicitadas y escriba los
valores del estado final resultante en la siguiente tabla:
programa usuario ingresa un σ0 produce una salida σ
1.a ejecución 1
1.a ejecución 2
1.a ejecución 3
1.b ejecución 1
1.b ejecución 2
1.b ejecución 3
1.c ejecución 1
1.c ejecución 2
1.c ejecución 3
b) Utilizar la función assert de C para asegurar que se cumpla la precondición σ0.
4. Condicionales
a) Tradućı al lenguaje C los programas 1.e y 1.f de este práctico.
El estado σ0 debe solicitarse al usuario, agregando las instrucciones necesarias para que
el usuario pueda ingresar los valores de las variables de entrada.
b) Tradućı a lenguaje C los programas que siguen a continuación, agregando las instruccio-
nes necesarias para que el usuario pueda ingresar los valores de las variables de entrada.
Luego, completá los estados:
2
https://wiki.cs.famaf.unc.edu.ar/lib/exe/fetch.php?media=algo1:2019-2:practico3.pdf
https://wiki.cs.famaf.unc.edu.ar/lib/exe/fetch.php?media=algo1:2019-2:practico3.pdf
[|σ0 : (x7→ 5 ,y7→ 4 ,z7→ 8 ,m7→ 0 ) |]
var x,y,z,m:Int;
if (x < y) →m := x
(x ≥ y) →m := y
fi
[|σ1 : (x7→ ,y7→ ,z7→ ,m7→ ) |]
if (m < z) →skip
(m ≥ z) →m := z
fi
[|σ2 : (x7→ ,y7→ ,z7→ ,m7→ ) |]
Volvé a ejecutar nuevamente con otros estados iniciales. ¿Qué hace este programa?
¿Cuál es el valor final de la variable m?.
5. Ciclos
a) Tradućı al lenguaje C los programas 1.h y 1.i del práctico. El estado σ0 debe solicitarse
al usuario, agregando las instrucciones necesarias para que el usuario pueda ingresar los
valores de las variables de entrada.
b) Tradućı a lenguaje C los programas que siguen a continuación, agregando las instruc-
ciones necesarias para que el usuario pueda ingresar los valores. Luego, completá los
estados, donde el estado a completar es el resultado de realizar 1, 2, 3 o 4 iteraciones
del ciclo. Una iteración es la ejecución completa del cuerpo del ciclo.
1)
[|σ0: (x7→13,y7→ 3 ,i7→ 0 ) |]
i := 0
do (x ≥ y)→
x := x− y
i := i+ 1
[|σ01, σ11, σ21, σ31|]
od
[|σ01: (x7→ ,y7→ ,i7→ ) , σ11: (x7→ ,y7→ ,i7→ ) ,
luego de iter. 1, luego de iter. 2
σ21: (x7→ ,y7→ ,i7→ ) , σ31: (x7→ ,y7→ ,i7→ ) |]
luego de iter. 3 luego de iter. 4
3
https://wiki.cs.famaf.unc.edu.ar/lib/exe/fetch.php?media=algo1:2019-2:practico3.pdf
2)
[|σ0: (x7→ 5 ,i7→ 0 ,res7→False) |]
i := 2
res := True
do(i < x ∧ res)→
res := res ∧ (mod(x, i) 6= 0)
i := i+ 1
[|σ01, σ11, σ21|]
od
[|σ01: (x7→ ,i7→ ,res7→ ) , σ11: (x7→ ,i7→ ,res7→ ) ,
luego de iter. 1 luego de iter. 2
σ21: (x7→ ,i7→ ,res7→ ) |]:
luego de iter. 3
3) Ejecutá los programas con otros estados iniciales para deducir qué hace cada uno.
6. (Funciones en C’) Escrib́ı los siguientes programas:
a) entradas.c que lee una variable de tipo int y la imprime por pantalla. En esta ocasión
el programa debe utilizar dos funciones a definir (además de la función main):
una función que le pide un entero al usuario y lo devuelve, con prototipo:
int pedirEntero(void)
que toma un entero como parámetro y lo imprime:
void imprimeEntero(int x)
b) Escrib́ı el programa del ejercicio 4b, pero utilizando las funciones del ejercicio anterior.
¿Qué ventajas enconarás en esta nueva versión?. ¿Podŕıa escribir alguna otra función
en ese ejercicio, cual?. ¿En qué otros ejercicios de ese Proyecto lo podŕıas utilizar?.
Reescrib́ı los programas donde puedas utilizarlas.
c) en un archivo saludos.c implementar las funciones siguientes (Además de la main):
una que imprime el string "hola", que no toma ni devuelve parámetros, con
prototipo:
void imprimeHola(void)
similar a la anterior con la el string "chau":
void imprimeChau(void)
Ese programa tiene que imprimir dos veces “Hola” seguido de dos veces “Chau”,
llamando a las dos últimas funciones desde el main.
ayuda: Se debe entender como corre el flujo de ejecución de este programa leyendo su
código fuente.
4
		Objetivo
		Lenguaje ``C''
		Ejercicios

Continuar navegando

Materiales relacionados

4-PADINI

SIN SIGLA

User badge image

ornella padini