Portafolios de Programación

En este espacio se podrán ver las tareas en el curso de programación de la sección 114/s5. Además de algunas investigaciones.

Se pretende agregar prácticas de laboratorio y algunos algorítmos simples que se incluyen en el temario de fundamentos de programación.

Abajo se muestra la tarea, investigación o ejercicio que se hizo por última vez en el curso.

Celina O. O.

Libreria menus.h del proyecto

#include

void principal()
{
printf("\n\t __ ");
printf("\n\t .'..'. ");
printf("\n\t .'. __ .'. ");
printf("\n\t / `------` \ ");
printf("\n\t __________.---. _ / \\.--.// \ _ .---.__________ ");
printf("\n\t __..........|.--------.`.---| |. / .'\\ //'. \ .| |---.'.--------.|..........__ ");
printf("\n\t /_ .--||\\\\\\\\\\ `.-| | ) | / \ | ( | |-.' //////////||--. _\ ");
printf("\n\t '''''''''''''.\\\\\\_..--. `|_|' | / .''''. \ | `|_|' .--.._//////.''''''''''''' ");
printf("\n\t '._.-' '. '. | | / .''. \ | | .' .' `-._.` ");
printf("\n\t '. '. \| | | | | |/ .' .' ");
printf("\n\t '. './\\ \ '..' / //\.' .' ");
printf("\n\t '. \ `----' / .' ");
printf("\n\t '. '..____..' .' ");
printf("\n\t '-..______..-' LGB ");
printf("\n\t M O D U L A T O R C O N T R O L 3 . 0 ");
printf("\n\n\n\n\t De un enter para continuar");
}


void menu(){
printf("\n\t O--------------------------------O");
printf("\n\t | |");
printf("\n\t | |");
printf("\n\t | M E N U P R I N C I P A L |");
printf("\n\t | |");
printf("\n\t | |");
printf("\n\t O--------------------------------O\n");
printf("\n\t 1. Registrar alumnos\n");
printf("\n\t 2. Busqueda\n");
printf("\n\t 3. Mostrar registros\n");
printf("\n\t 4. Salir\n");
printf("\n\n\n\t\t\t Escriba 5 para ver la información del autor");
}

void subm_registro()
{
printf("\n\t O--------------------------------O");
printf("\n\t | |");
printf("\n\t | |");
printf("\n\t | M E N U R E G I S T R O |");
printf("\n\t | |");
printf("\n\t | |");
printf("\n\t O--------------------------------O\n");
printf("\n\t 1. Empezar registro\n");
printf("\n\t 2. Mostrar ultimos registros\n");
printf("\n\t 3. Salir\n");
}

void subm_registro2(){
printf("\n\t1. Registrar\n");
printf("\n\t2. Dar de baja\n");
printf("\n\t3. Modificar nombre\n");
printf("\n\t4. Modificar matricula\n");
printf("\n\t5. Salir\n");
}

void subm_buscar()
{
printf("\n\t O--------------------------------O");
printf("\n\t | |");
printf("\n\t | |");
printf("\n\t | M E N U B U S Q U E D A |");
printf("\n\t | |");
printf("\n\t | |");
printf("\n\t O--------------------------------O\n");
printf("\n\t 1. Busqueda por nombre\n");
printf("\n\t 2. Busqueda por matricula\n");
printf("\n\t 3. Salir\n");
}

void subm_mostrar()
{
printf("\n\t O--------------------------------O");
printf("\n\t | |");
printf("\n\t | |");
printf("\n\t | M E N U M O S T R A R |");
printf("\n\t | |");
printf("\n\t | |");
printf("\n\t O--------------------------------O\n");
printf("\n\t 1. Mostrar lista ordenada por nombre\n");
printf("\n\t 2. Mostrar lista ordenada por matricula\n");
printf("\n\t 3. Mostrar lista ordenada por fecha\n");
printf("\n\t 4. Salir");
}


void creditos()
{
printf("\t\n ______________________________________________________________");
printf("\t\n /\ e-mail: snake_nooby@hotmail.com \.");
printf("\t\n \_| dragon_night_11@hotmail.com, campos-man@hotmail.com |");
printf("\t\n | javscdal10@hotmail.com |");
printf("\t\n | ....................................... |");
printf("\t\n | http://celina-programacion.blogspot.com |");
printf("\t\n | __________________________________________________________|___");
printf("\t\n \_/_____________________________________________________________/");
printf("\n\n\n\n\n\n Dibujos en http://www.ugr.es/~peruano/ascii.html, http://www.chris.com/ascii/");
}

Libreria milib.h del proyecto

#include
#include
#include
char nombra[20];
/*Estructura estandar*/
struct modulo{
char nombre[20];
char hora_e[9];
char hora_s[9];
char activ[100];
int maquina;
int matricula;
}usuario[45],p,aux;

/*funcion para obtener la fecha*/

void fecha(char *fech)
{
time_t tiempo = time(0);
struct tm *tlocal = localtime(&tiempo);
strftime(fech,10,"%d-%m-%y",tlocal);
return;
}/*Fin funcion fecha*/

/*funcion para obtener el nombre del archivo deacuerdo a la fecha
del dia*/

void nombre_ar(char *nom){
char da[5]=".dat";
fecha(nom);
strcat(nom,da);
return;
} /*Fin funcion nombre_ar*/

/*funcion para validar
void validar(int dato) en prograso jajaja{
*/


/*funcion para obtener la hora*/
void hora(char *hora)
{
time_t tiempo = time(0);
struct tm *tlocal = localtime(&tiempo);
strftime(hora,7,"%H:%M",tlocal);
return;
}/*Fin funcion hora*/

/*funcion para ingresar los datos de la estructura*/
void ingresar()
{
struct modulo *pus=usuario;
int i,e;
int pos;
char valid[20];
char cas[10],opc='s';
printf("\t**------------------------------------------**\n");
printf("\t** Ingrese los datos para cada alumno **\n ");
printf("\t**------------------------------------------**");
i=0;
do
{ setbuf(stdin,NULL);
printf("\n\tNumero de equipo:\n\t");
scanf("%s",&valid);
if(!(pos=(validar(valid))))
continue;

pos--;
if((pos>45)(pos<=0)){ printf("\n\tNo esxiste ese numero de equipo"); continue; }/*Fin if uno*/ if (((pus+pos)->maquina!=0)){
printf("\n\tNo es posible asignar un equipo que ya ha sido ocupado");
continue;
}/*Fin if dos*/
(pus+pos)->maquina=pos;
printf("\tNombre:\n\t");
scanf("%*c%[^\n]",&(pus+pos)->nombre);
printf("\tMatricula:\n\t");
scanf("%*c%[^\n]",&valid);
if(!(((pus+(pos))->matricula)=(validar(valid)))) {
(pus+pos)->maquina=0;
continue;}
printf("\tActividades:\n\t");//(pus+pos)->maquina=0;
scanf("%*c%[^\n]",&(pus+(pos))->activ);
hora((pus+(pos))->hora_e);
i++;
printf("\tIngresarà mas datos(s/n)?:\n\t");
setbuf(stdin,NULL);
scanf("%c",&opc);
}while(opc!='n');
return;
}/*Fin funcion ingresar*/

/*funcion para imprimir con formatos los datos de la estructura*/
void imprimir(){
int e;
struct modulo *pus;
pus=usuario;
system("clear");
setbuf(stdout,NULL);
printf("\n\t_______ESTADO ACTUAL:_______________________________________________\n");
for(e=0;e<45;e++){>maquina!=0){
printf("\t%-10d",((pus+e)->maquina)+1);
printf("%-10s\t",(pus+e)->nombre);
printf("%-10d\t",(pus+e)->matricula);
printf("%-10s\t",(pus+e)->hora_e);
printf("%-10s\t",(pus+e)->activ);
printf("%-10s\n",(pus+e)->hora_s);
printf("\t----------------------------------------------------------------------\n");
}/*Fin if*/
}/*Fin for*/
return;
}/*fin funcion imprimir*/

/*funcion para dar de baja los datos de la estructura
y quitarlos de la lita de datos que se mostraran ah, tambien
para guardar los datos en un archivo*/

void baja(){
setbuf(stdout,NULL);
FILE *archivo;
int opc,flag=0;;
struct modulo *pus;
pus=usuario;
while(flag==0){
printf("\tEscriba el numero del equipo del usuario que retirara:\n\t");
scanf("%d",&opc);
opc--;
if(((pus+opc)->maquina)==0){
printf("\tNo existe un usuario con ese numero de equipo\n");
continue;
}
else {
flag=1;
}
hora((pus+(opc))->hora_s);
}
if ((archivo=fopen(nombra,"a+"))==NULL)
printf("\nError no se pudo abrir el archivo");
else{
fprintf(archivo,"%d\t",((pus+opc)->maquina+1));
fprintf(archivo,"%s\t",(pus+opc)->nombre);
fprintf(archivo,"%d\t",(pus+opc)->matricula);
fprintf(archivo,"%s\t",(pus+opc)->hora_e);
fprintf(archivo,"%s\t",(pus+opc)->activ);
fprintf(archivo,"%s\n",(pus+opc)->hora_s);
fclose(archivo);
}
(pus+opc)->maquina=0;
return;
}/*Fin funcion baja*/

/*funcion para imprimirel contenido de
un archivo*/

void imprimirar (struct modulo *temp,int el){
int j=0;
for(j=0;j < i="0,j," fichero =" fopen("> ", nombre );
if( fichero )
printf( "existe (ABIERTO)\n" );
else
{
printf( "Error (NO ABIERTO)\n" );
return 0;
}
while(!feof(fichero)){
fscanf(fichero,"%d",&temp[i].maquina);
fscanf(fichero,"%*c%[^\t]",&temp[i].nombre);
fscanf(fichero,"%d",&temp[i].matricula);
fscanf(fichero,"%s",&temp[i].hora_e);
fscanf(fichero,"%*c%[^\t]",&temp[i].activ);
fgets(temp[i].hora_s,15,fichero);
i++;
}
el=i;
printf ("El fichero contiene la informacion de %d registros:\n",i-1);
if( !fclose(fichero) ){

return i;
}
else
{
printf( "\nError: fichero NO CERRADO\n" );
return 0;
}
}//<-esta es la llave jajaja /*Funcion para modificar los datos de la estructura estandar * en caso de algun erro solo por nombre*/ void modificar_n(){ int opc,flag=0; printf("\n\tEliga equipo que modificara:\n\t"); scanf("%d",&opc); opc--; while(flag==0){ if((usuario[opc].maquina)==0){ printf("\n\tEse equipo no esta ocupado"); continue; } else{ printf("\n\tEscriba el nombre correcto\n\t"); scanf("%*c%[^\n]",&usuario[opc].nombre); flag=1; } } return; } /*funcion para modificar los datos solo por matricula*/ void modificar_m(){ int opc,flag=0; printf("\n\tEliga equipo que modificara:\n\t"); scanf("%d",&opc); opc--; while(flag==0){ if((usuario[opc].maquina)==0){ printf("\n\tEse equipo no esta ocupado"); continue; } else{ printf("\n\tEscriba el la matricula correcta\n\t"); scanf("%d",&usuario[opc].matricula); flag=1; } } return; } /*funcion para ordenar los datos de un archivo por fecha*/ void ordena_mat(struct modulo *ap, int k) { int m,i,j,w; FILE *orden; struct modulo temp; char nombre[20]; char a[10]=".m"; fecha(nombre); strcat(nombre,a); if((orden=fopen(nombre, "w"))==NULL){ printf("Error de escritura"); } else{ for(i=0;i < j="0;j<(k-1);j++)" maquina="(ap+i)-">maquina;
(ap+i)->maquina=(ap+j)->maquina;
(ap+j)->maquina=temp.maquina;

strcpy(temp.nombre,(ap+i)->nombre);
strcpy((ap+i)->nombre,(ap+j)->nombre);
strcpy((ap+j)->nombre,temp.nombre);

temp.matricula=(ap+i)->matricula;
(ap+i)->matricula=(ap+j)->matricula;
(ap+j)->matricula=temp.matricula;

strcpy(temp.hora_e,(ap+i)->hora_e);
strcpy((ap+i)->hora_e,(ap+j)->hora_e);
strcpy((ap+j)->hora_e,temp.hora_e);

strcpy(temp.activ,(ap+i)->activ);
strcpy((ap+i)->activ,(ap+j)->activ);
strcpy((ap+j)->activ,temp.activ);
strcpy(temp.hora_s,(ap+i)->hora_s);
strcpy((ap+i)->hora_s,(ap+j)->hora_s);
strcpy((ap+j)->hora_s,temp.hora_s);

}
}

}
for(j=0; jmaquina);
fprintf(orden,"%s\t",(ap+j)->nombre);
fprintf(orden,"%d\t",ap[j].matricula);
fprintf(orden,"%s\t",(ap+j)->hora_e);
fprintf(orden,"%s\t",(ap+j)->activ);
fprintf(orden,"%s\n",(ap+j)->hora_s);
}
}fclose(orden);
}

/*funcion para ordenar los datos por nombre*/
void ordena_nom(struct modulo *ap, int k)
{
int m,i,j,w;
FILE *orden;
struct modulo temp;
char nombre[20];
char a[10]=".n";
fecha(nombre);
strcat(nombre,a);
if((orden=fopen(nombre, "w"))==NULL){
printf("Error de escritura");
}
else{
for(i=0;i<(k);i++) { for(j=0;j<((k)-1);j++) { if(strcmp((ap+i)->nombre,(ap+j)->nombre)<0) maquina="(ap+i)-">maquina;
(ap+i)->maquina=(ap+j)->maquina;
(ap+j)->maquina=temp.maquina;

strcpy(temp.nombre,(ap+i)->nombre);
strcpy((ap+i)->nombre,(ap+j)->nombre);
strcpy((ap+j)->nombre,temp.nombre);

temp.matricula=(ap+i)->matricula;
(ap+i)->matricula=(ap+j)->matricula;
(ap+j)->matricula=temp.matricula;
strcpy(temp.hora_e,(ap+i)->hora_e);
strcpy((ap+i)->hora_e,(ap+j)->hora_e);
strcpy((ap+j)->hora_e,temp.hora_e);

strcpy(temp.activ,(ap+i)->activ);
strcpy((ap+i)->activ,(ap+j)->activ);
strcpy((ap+j)->activ,temp.activ);

strcpy(temp.hora_s,(ap+i)->hora_s);
strcpy((ap+i)->hora_s,(ap+j)->hora_s);
strcpy((ap+j)->hora_s,temp.hora_s);
}
}
}
for(j=0; j<(k); j++){ fprintf(orden,"%d\t",(ap+j)->maquina);
fprintf(orden,"%s\t",(ap+j)->nombre);
fprintf(orden,"%d\t",ap[j].matricula);
fprintf(orden,"%s\t",(ap+j)->hora_e);
fprintf(orden,"%s\t",(ap+j)->activ);
fprintf(orden,"%s\n",(ap+j)->hora_s);
}
fclose(orden);
}
}

/*funcionpara buscar por nombre los datos de el archivo*/

void busca_nombre(){
int i=0, j, numl,flag=0;
char fecha[15];
char nombre[30];
struct modulo *temp;//<- aqui esta la estructura jajaja, ah ok :P
FILE *fichero;
temp=&p;
temp=malloc(200*sizeof(struct modulo));
printf("Escribe la fecha del archivo en el que desea buscar\n");
printf("\nEjemplo: dd-mm-aa.dat, no olvide la extensión\n");
scanf("%*c%[^\n]", &fecha);
printf("Escribe el nombre que deseas buscar: \n");
scanf("%*c%[^\n]",&nombre);
if((fichero=fopen(fecha,"r")==NULL)){
printf("No se puede leer el archivo\n");
}
else{
numl=(leerar(fecha,temp));
for (i=0;i < numl-1;i++){
if(strcmp(temp[i].nombre, nombre)==0){
printf("%-8d",temp[i].maquina);
printf("%-10s",temp[i].nombre);
printf("%-13d",temp[i].matricula);
printf("%-15s",temp[i].hora_e);
printf("%s",temp[i].activ);
printf("%-8s",temp[i].hora_s);
flag=1;
}
}/*Fin while*/
if (flag==0)
printf("\nNo se encontro el dato");
}/*Fin else*/

printf("\nEnter para regresar al menu anterior\n");
getchar();
getchar();
return;
free(temp);
fclose(fichero);
}/*Fin de la funcion*/

void busca_matricula(){
int i=0, j, numl,flag=0;
char fecha[15];
int mat;
struct modulo *temp;//<- aqui esta la estructura jajaja, ah ok :P
FILE *fichero;
temp=&p;
temp=malloc(200*sizeof(struct modulo));
printf("Escribe la fecha del archivo en el que desea buscar\n");
printf("\nEjemplo: dd-mm-aa.dat, no olvide la extensión\n");
scanf("%*c%[^\n]", &fecha);
printf("Escribe la matricula que deseas buscar: \n");
scanf("%d",&mat);
if((fichero=fopen(fecha,"r")==NULL)){
printf("No se puede leer el archivo\n");
}
else{
numl=(leerar(fecha,temp));
for (i=0;i < numl-1;i++){
if(temp[i].matricula==mat){
printf("%-8d",temp[i].maquina);
printf("%-10s",temp[i].nombre);
printf("%-13d",temp[i].matricula);
printf("%-15s",temp[i].hora_e);
printf("%s",temp[i].activ);
printf("%-8s",temp[i].hora_s);
flag=1;
}
}/*Fin while*/
if (flag==0)
printf("\nNo se encontro el dato");
}/*Fin else*/
printf("\nEnter para regresar al menu anterior\n");
getchar();
getchar();
return;
free(temp);
fclose(fichero);
}/*Fin de la funcion*/

int validar(char *numPtr)
{
int numero,i,j,flag=1;
i=strlen(numPtr);
for(j=0;j < i;j++){
if(!(isdigit(numPtr[j]))){
printf("\n\tEn este campo solo se admiten numeros");
flag=0;
break;
}
}
if (flag==1){
numero=atoi(numPtr);
return numero;
}
else
return 0;
}

Cuerpo del Proyecto

#include
#include
#include
#include "menus.h"
#include "milib.h"


int main(){
char *fec[15];
nombre_ar(nombra);
int num_l;
int i, j;
char op1[10],op2[10],op3[10];
int opc1, opc2, opc3;
FILE *buscar;
char busca[20];
for(i=0;i<45;i++){
usuario[i].maquina=0;
strcpy(usuario[i].hora_s,"---");
}
struct modulo *temp;
temp=&p;
temp=malloc(200*sizeof(struct modulo));
do{
printf("%s",nombra);
system("clear");
menu();
scanf("%d", &opc1);
switch(opc1){
system("clear");
case 1:{
do{
system("clear");
setbuf(stdin,NULL);
subm_registro();
scanf("%d",&opc2);
switch(opc2){
case 1:{
do{
//ya quedo
system("clear");
imprimir();
subm_registro2();
scanf("%d", &opc3);
switch(opc3){
case 1:{
ingresar();
break;
}
case 2:{
baja();
break;
}
case 3:{
modificar_n();
break;
}
case 4:{
modificar_m();
break;
}
case 5: break;
default: {
printf("\t\nNo existe esa opción");
break;
}
}
}while(opc3!=5);/*Fin while del "do" case1*/
break;
}/*Fin case uno*/
case 2: {
system("clear");
num_l=(leerar(nombra,temp));
imprimirar(temp,num_l);
printf("\n\tEnter para continuar");
getchar();
getchar();
/*Funcion para mostrar ultimos registros*/
break;
}
case 3: break;
default:{
printf("\n\tNo existen esas opciones");
break;
}//fin del default
}/* Fin del switch registro*/
}while(opc2!=3);/*Fin while del menu registro*/
break;
}//fin del gran case 1 "registrar alumnos"
case 2:{
do{
system("clear");
subm_buscar();
scanf("%d",&opc2);
switch(opc2){
case 1:{
busca_nombre();
continue;
}
case 2:{
busca_matricula();
break;
}
case 3:{
system("clear");
setbuf(stdin,NULL);
printf("\nEscribe la fecha que deseas buscar recuerde la extencion (.dat .m .n)");
scanf("%s",&busca);
printf("\nNota: se mostrara el contenido del archivo con extensión .dat");
if(buscar=(fopen(busca,"r")==NULL)){
printf("No existe ese archivo");}
else
printf("El archivo %s existe en la carpeta actual",busca);
fclose(buscar);
getchar();
getchar();
break;
}
case 4: break;
default:{
printf("\n\tNo existen esos menus:");
break;
}
}//switch buscar
}while(opc2!=4);//menu busqueda
break;
}/*Fin case 2 "busqueda"*/
case 3:{
do{
system("clear");
subm_mostrar();
scanf("%d",&opc2);
switch(opc2){
case 1: {
system("clear");
num_l=(leerar(nombra,temp));
ordena_nom(temp,num_l);
imprimirar(temp,num_l);
getchar();
getchar();
break;
}
case 2: {
system("clear");
num_l=(leerar(nombra,temp));
ordena_mat(temp,num_l);
imprimirar(temp,num_l);
getchar();
getchar();
break;
}
case 3: {
system("clear");
system("find ./home/pro/mipro *.dat");
getchar();
getchar();
break;
}
case 4: break;
default: {
printf("\t\nNo existe esa opción");
break;
}
} /*Fin switch*/
}while(opc2!=4);
}/*Fin case 3 "mostrar registros"*/
case 4: break;
default:{
printf("\n\tNo existe esa opción");
break;
}
break;
}
}while(opc1!=4);
}/*Fin main*/

Código 24: Apuntadores a matriz

Hacer un programa que llene una matriz para 20 estudiantes cn tres columnas, cada columna deberá representar una calificación; posteriormente enviar la matriz a una función que calculará el promedio para cada estudiantey serán enviados a un vecrot el cuál será devuelto por la función.

#include

void suma(int x[][3], int *prom)
{
int m, n, suma[2]={0,0};

for(m=0; m<2; m++)
for(n=0; n<3; n++)
prom[m]=prom[m]+x[m][n];
return;

}

int main()
{
int alumnos[2][3], j, i, *ap, *prom;
int promedio[2]={0,0};
ap=alumnos[3];
prom=promedio;
for(i=0; i<2; i++){
printf("\n\nAlumno %d: \n", i+1);
for (j=0; j<3; j++){
printf("Calificacion %d: ", j+1);
scanf("%d", &alumnos[i][j]);
}
puts("\n");
}

suma(alumnos,prom);

for(i=0; i<2; i++)
printf("El promedio es del alumno %d: %d\n", i+1, promedio[i]/3);
puts("\n");
}

Código 23: Apuntadores a estructura

Un señor tiene una tienda de abarrotes y dentro de ella cuenta con una máquina que vende chocolares, la información que se requiere manejar es la siguiente:
--> tipo de chocolate, costo por pieza, cantidad vendida y costo total de la venta.
El señor x desea que al final del día el programa le indique qué tipo de chocolate fue el más vendido y el costo de la venta.

#include
#define n 2
#include "mismenus.h"


struct carac
{
char nombre[30];
int id; /*ID del producto*/
int cantv;
int cantc; /*Guarda el numero de chocolates existentes*/
int costo;
}choco[n];

int main()
{

setbuf(stdin,NULL);
int opc, i, opc2;
int a, vent;
struct carac *ap;

do
{
menu();
scanf("%d", &opc);
switch(opc)
{

case 0: {
do
{
menuadmin();
scanf("%d", &opc2);
switch (opc2)
case 1:
{
printf("Escribe los datos de %d chocolates", n);
for (i=0; i < n; i++){
printf("\nNombre: \n");
scanf("%*c%[^\n]", &choco[i].nombre);
printf("Cuantos hay: \n");
scanf("%d", &choco[i].cantc);
printf("¿De a como?\n");
scanf("%d", &choco[i].costo);
}
}
}
while(opc2!=3);
break;
}
case 1: {
for (i=0; i < n; i++){
if(choco[i].cantc==0)
printf("\nNo hay chocolates, vuelve más tarde\n");
else{
choco[i].id=i;
printf("\nID del producto: %d", choco[i].id);
printf("\n%s\n", choco[i].nombre);
printf("%d\n", choco[i].cantc);
printf("%d\n\n", choco[i].costo);
}/*Fin else*/
}/*Fin for*/
printf("\n\nId del producto que quieres comprar: ");
scanf("%d", &a);
vent=comprar(ap, &a, 2);
printf("Quedan %d chocolates", choco[i].cantc);
printf("%d",vent);
break;
}

}/*Fin del SWITCH*/

}while(opc!=2);

} /*Fin del main*/





/*Libreria mismenus.h*/
void menu(void)
{
printf("\n Choco Machine \n\n");
printf("\n1.Mostrar y comprar chocolates");
printf("\n2.Salir");
printf("\n\n\nEscribe 0 si eres el administrador\n");
return;
}

void menuadmin(void)
{
printf("\n1.Llenar maquina");
printf("\n2.Reporte de ventas");
printf("\n3.Salir");
return;
}

int comprar(struct carac *ap, int *a, int n)
{
int i, venta;
for (i=0; iif (ap->id[i]==*a)
ap->cant[i]=(ap->cant[i])-1;
else
printf("No existe el ID");
}
venta=venta+1;
return(venta);
}

Código 22: Apuntadores a vector

Programa que llena un vector de numeros reales o flotantes, este es enviado a una función que lo invierte e imprime.


#include
/*Programa que invierte un vector*/
int n;

void funcion(int *ap){

int i,j=n,v;
for(i = 0; i < (n/2); i++)
{
j--;
v=*(ap+i); /*Aritmetica de apuntadores*/
*(ap+i)=*(ap+j); /*Asigna el contenido del apuntador en la */
*(ap+j)=v; /*posicion i al contenido del apuntador en la*/
/*posición j*/
}

printf("\nEl vector invertido queda así: ");
for(i=0; i < n; i++)
printf (" %d ", ap[i]);
puts("\n");
return;
}

int main()
{

printf("¿Cuantos numeros deseas evaluar?\n");
scanf("%d", &n);

int vec[n], i, *ap;
printf("Escribe %d numeros\n", n);

for(i = 0; i < n; i++)
scanf("%d", &vec[i]);

ap = vec;
funcion(ap);

}

Código 21: Apuntadores a vector

Programa que a través de una función dice si un numero es positivo, negativo o neutro.

#include
int a;

void valor(int a){
if(a>0)
printf("El valor %d es positivo", a);
if(a==0)
printf("El valor de %d es neutro", a);
if(a<0)
printf("El valor de %d es negativo", a);
}

int main(){
int a;
int i, n;
int vec[n];
printf("¿Cuántos numeros deseas evaluar?\n");
scanf("%d", &n);

for(i = 0; i < n; i++){
printf("Introduce el %d numero: ", i+1);
scanf("%d", vec[i]);
}

for(i = 0; i < n; i++){
a=vec[i];
valor(a);
}

}

Código 20: Apuntadores a vector

Hacer un programa que llene un vector con 20 numeros enteros, posteriormente deberá ser enviado a una función y esta deberá encontrar el numero mayor y el menor de todo el vector.

#include
int buscar(int *x, int *M, int tam)
{
int *M=0, m=0;
int k;
M=*x;
m=*x;
for (k=0; k < tam; k++){
if(*M < *x+k)
*M = *x;
else
m = * x:
return (m);
x+k;
}

int main(){
int num[20]; i, M, *p;
int m, p=num;
printf("Dame 20 numeros: ");
for(i=0; i<20; i++){
scanf("%d", &num[i]);
m=buscar(p, &M, 20);
printf("El mayor es %d", M);
printf("El menor es %d", m);
return 0;
}

Código 19: Apuntadores

/*Programa que llena un vector con caracteres, después verifica si hay caracteres diferentes de digitos,si los hay los cambia por 1*/

#include
#include

char digito(char carac)
{
if (!isdigit(carac))
carac='1';
return carac;
}


int main ()
{
int i;
char carac[50];
printf ("Dame 50 caracteres:\n");
for (i=0;i<10;i++){
scanf ("%c", &carac[i]);
fflush (stdin);
}
printf ("\n\n El vector queda asi:\n");
for (i=0;i<10;i++){
carac[i]=digito(carac[i]);
printf ("%c\n", carac[i]);
fflush (stdin);}
}

Código 18: Funciones

Hacer un programa que lleve a cabo las siguientes operciones de dos numeros de tipo entero:
Sumar 2 numeros
Restar 2 numeros
Multiplicar 2 numeros
Dividir 2 numeros
Posteriormente mostrarle al usuario un menú en el que podrá elegir la operación que desea realizar.

/*Calculadora*/



#include

int suma(int a,int b)

{int res;

res=a+b;

return(res);} /*Suma*/



int resta(int a,int b)

{int res;

res=a-b;

return(res);} /*Resta*/



int multiplica(int a,int b)

{int res;

res=a*b;

return(res);} /*Multiplicacion*/



int divide(int a,int b)

{int res;

res=a/b;

return(res);} /*División*/



int main()

{

int opc,res,a,b;

char r;

do
/*Menu de opciones para calcular 2 numeros*/

{

printf ("Dame dos numeros:\n");

scanf("%d", &a);

scanf("%d", &b);

printf(" Elija la operacion que desea realizar\n\n");

printf(" 1.Suma\n");

printf(" 2.Resta\n");

printf(" 3.Multiplicacion\n");

printf(" 4.Division\n\n");

scanf("%d",&opc);



switch(opc)

{

case 1: res=suma(a,b);

printf("El resultado de la suma es: %d\n\n",res);break;

case 2: res=resta(a,b);

printf("El resultado de la resta es: %d\n\n",res);break;

case 3: res=multiplica(a,b);

printf("El resultado de la mult. es: %d\n\n",res);break;

case 4: if (b=!0) res=divide(a,b);

printf("El resultado de la div. es %d\n\n",res);break;

default:printf("No ha elegido la opción correcta\n\n"); break;

}



printf("\nDesea calcular otra operacion?s/n");

scanf("%c",&r);

scanf("%c",&r);

printf("\n\n\n\n");



}while(r=='s');



}

Código 17: Ofrendas

Programa que almacena los datos de varias ofrendas y al final imprime cuál fue la que gastó mas.


#include
#include

struct ofrenda
{
char tipo[40];
char lugar[40];
int niveles;
int costo;
}of[20];

int main()
{
int i, num=0;
int vec[num], may=0, ii=0;

printf ("\n¿Cuántas ofrendas deseas evaluar?");
scanf("%d",&num);
num--;

for (i=0; i<=num; i++)
{
printf("\n Ofrenda %d", i+1);
printf("\n\t¿Que tipo de ofrenda es?(Tradicional/Libre)");
gets(of[i].tipo);
gets(of[i].tipo);
printf("\t¿De dónde es la ofrenda?");
gets(of[i].lugar);
printf("\t¿Cuántos niveles tenía la ofrenda?");
scanf("%d", &of[i].niveles);
printf("\t¿Cuánto costó la ofrenda?");
scanf("%d", &of[i].costo);
}

/* Esta parte no se ejecutará en el programa, pero si se deja
de comentar, mostraría los datos que se han introducido*/
/*
for (i=0; i<=num; i++)
{
printf("\n Tipo de Ofrenda %d: %s", i+1,of[i].tipo);
printf("\n Lugar de procedencia: %s", of[i].lugar);
printf("\n Niveles: %d", of[i].niveles);
printf("\n Costo: %d \n", of[i].costo);
}
*/

/*Aquí se hace la comparación de la ofrenda que costó más cara*/

for (i=0; i<=num; i++)
{
vec[i]=of[i].costo;
if(vec[i]>may)
{
may=vec[i];
ii=i+1;
}
}

printf("\n\n La ofrenda No.%d es la mas cara, con %d pesos \n", ii, may);
printf("\n\n F e l i c i d a d e s\n\n\n");



}/*Fin del programa principal*/

Código 16: Suma de matrices

#include
#define max 100

void suma(int M[max][max], int N[max][max], int S[max][max], int f, int c);

int main ()
{

int M[max][max], N[max][max], S[max][max], i, j, f1, f2, c1, c2;

printf("\nDame el numero de filas de la matriz 1: ");
scanf("%d", &f1);
printf("\nDame el numero de columnas de la matriz 1: ");
scanf("%d", &c1);

if((f1>0)&&(c1>0))
{
for(i=0; i < f1; i++)
for(j=0; j < c1; j++)
{
printf("Dame un valor: ");
scanf("%d", &M[i][j]);
}
}

else
{
printf("\nNo puede haber filas o columnas negativas\n");
getchar();
}
puts("\n");

printf("\nDame el numero de filas de la matriz 2: ");
scanf("%d", &f2);
printf("\nDame el numero de columnas de la matriz 2: ");
scanf("%d", &c2);

if((f2>0)&&(c2>0))
{
for(i=0; i < f2; i++)
for(j=0; j < c2; j++)
{
printf("Dame un valor: ");
scanf("%d", &N[i][j]);
}
}

else
{
printf("\nNo puede haber filas o columnas negativas\n");
getchar();
}
puts("\n");

if((f1!=f2)&&(c1!=c2))
{
printf("\nError, no se pueden sumar, numero de filas y columas no coinciden\n");
getchar();
}

Código 15: Invertir cadena

Programa que lee una cadena y posteriormente la invierte

#include
#include

main()
{

char cad1[30], cad2[30];
int i, n, compara;
printf("\n Dame una cadena: ");
gets(cad1);
n=strlen(cad1);
strcpy(cad1,cad2);

for(i=n; i<=0; i--)
cad2[i]=cad1[i]+cad2[i];
printf("%c", cad2[i]);
puts("\n");
}

Código 14: Arreglos bidimensionales

Programa que resuelve el siguiente problema: Se desea almacenar las calificaciones para 4 estudiantes, posteriormente se calculará el promedio de cada estudiante y se guardará en un vector, del cual se sacará un promedio general.


#include

main()
{
int E[4][3], S[4], fil, col;
float suma=0.0, prom=0.0, P[4];


for (fil=0; fil<4; fil++){
printf("Alumno %d \n", fil+1);
for (col=0; col<3; col++)
{
printf("Calificacion %d :",col+1);
scanf("%d", &E[fil][col]);
S[fil]=S[fil]+E[fil][col];
}
P[fil]=S[fil]/3;
}


for (fil=0; fil<4; fil++){
for (col=0; col<3; col++)
printf("| %d |",E[fil][col]);
printf("%.2f\n",P[fil]);
suma=suma+P[fil];
}

prom=suma/fil;
printf("\n El promedio general es: %.2f\n",prom);

}

Código 13: Numeros Primos

Programa que dada la magnitud de numeros que se evaluarán, al final dice, qué numeros de la lista son primos y cuáles no lo son.

#include
#include

main()
{
int numero1,numero2,numero,j,cont;

printf("Intrduzca un numero del que empieza\n");
scanf("%d",&numero1);
printf("Intrduzca un numero del que termina\n");
scanf("%d",&numero2);
for(numero=numero1;numero<=numero2;numero++)
{
j=1;
cont=0;

while((j<=numero))
{
if((numero%j)==0)
{
cont=cont+1;
}
j=j+1;
}
if(cont==2)
printf("\nEl numero %d es primo\n",numero);
else
{
printf("\nEl numero %d NO es primo\n",numero);
}

}

Código 12: Sumatoria del factorial

Programa que hace una sumatoria con casa elemento del cálculo del factorial

#include
#define max 100

int i, n, s, c, f[max];

int main ()
{
printf("\nDame n:");
scanf("%d", &n);

for(i=0; i < n; i++)
{
for(c=1, f[i]=1; c < i+2; c++)
f[i]=c;
s+=f[i];
}
printf("\nFactoriales\n");
for(i=0; i < n; i++)
printf("%d\t", f[i]);
printf("\nLa sumatoria es: %d\n\n", s);
getchar();
}

Código 11: Factorial de un numero

Programa que calcula el factorial de un numero

#include
main(){
int n1, r, i;
r=1;
printf("\n Dame un numero");
scanf("%d", &n1);
for(i=n1; i>=1; i--)
r=r*i;
printf("\n El factorial es: %d", r);
}

Código 10: Arreglos Unidimensionales

#include
int negativos (int b)
{
if (b<0)
b=b*-1;
return b;

}
int main ()
{
int i, a, vec[50];
printf ("Introduce enteros a evaluar:\n");
scanf ("%d", &i);

printf ("\nAhora introduce los enteros:\n");
for (a=0; a < i; a++)
scanf ("%d", &vec[a]);

printf ("El vector en forma positiva es: \n");
for (a=0; a < i; a++)
{
vec[a]=negativos(vec[a]);
printf ("%d\n", vec[a]);
}

}

Código 9: Arreglos Unidimensionales

Programa que compara si dos vectores son iguales o si son diferentes

#include
main(){
int vec1[20], vec2[20], i , j, k , c=0;
printf("\nIngresa 20 numeros");
for(i=0; i<20; i++)
scanf("%d", &vec1[i]);
for(j=0; j<20; j++)
scanf("%d", &vec2[i]);
for(j=0; j<20; j++){
if (vec1[k]=vec2[K])
c=c+1;
if (c=20)
printf("Los vectores son iguales"),
else
printf("Los vectores son distintos");
}
}

Código 8: Arreglos Unidimensionales

Programa que llena un vector con enteros hasta dar con un 0 o hasta rebasar el tamaño del vector, y posteriormente contar cuántos son positivos.

#include
main()
{
int num[100], pos, numero, contpos, k;
pos=0;
printf("Dame un numero entero");
do{
printf("Dame otro numero \n");
scanf("%d", &numero);
if(numero!=0){
num[pos]=numero;
pos=pos+1;
}
}while((numero!=0) || (pos<=100));

for(k=0; k if(num[k]>0)
contpos=contpos+1;
}
printf("Los numeros positivos del vector son:\t%d",contpos);
}/*Fin del main*/

Código 7: SWITCH

Programa que realiza conversiones de horas a lo que el usuario escoja en el menú de opciones: minutos, segundos, centésimas de segundo o milésimas de segundo.

#include

int main ()
{

int op;


do
{
printf("\n\nMenu de conversiones horas a:\n\n");
printf("1: Minutos\n");
printf("2: Segundos\n");
printf("3: Centesimas de Segundo\n");
printf("4: Milesimas de Segundo\n");
printf("5: Salir\n\n");
printf("Escoge una opcion: ");
scanf("%d", &op);

switch (op)

{

case 1:
{
float h, r;
system("cls");
printf("\nDame el numero de horas: ");
scanf("%f", &h);
r=h*60;
printf("\n\nEsto es igual a: %.2f minutos\n\n", r);
getchar();
getchar();
break;
}

case 2:
{
float h, r;
printf("\nDame el numero de horas: ");
scanf("%f", &h);
r=h*3600;
printf("\n\nEsto es igual a: %.2f segundos\n\n", r);
getchar();
getchar();
break;
}

case 3:
{
float h, r;
printf("\nDame el numero de horas: ");
scanf("%f", &h);
r=h*360000;
printf("\n\nEsto es igual a: %.2f centesimas de segundo\n\n", r);
getchar();
getchar();
break;
}

case 4:
{
float h, r;
printf("\nDame el numero de horas: ");
scanf("%f", &h);
r=h*3600000;
printf("\n\nEsto es igual a: %.2f milesimas de segundo\n\n", r);
getchar();
getchar();
break;
}

case 5:
{
puts("\nSalir\n");
getchar();
getchar();
break;
}

default:
{
puts("\n\nOpcion Invalida\n\n");
getchar();
break;
}
}
}
while(op!=5);
puts("\n");
getchar();
}

Código 6: IF

Programa que hace una división entre dos numeros, considerando la posibilidad de que el divisor sea diferente de 0.

#include

float a, b, c;

int main ()
{
printf("\nDame dividendo: ");
scanf("%f", &a);
printf("\nDame divisor: ");
scanf("%f", &b);

if (b!=0)
{
c=a/b;
printf("\nEl resultado de la division es: %.2f\n\n", c);
}

else
{
printf("\nError, no se puede dividir entre 0");
}


}

Código 5: IF

Programa que calcula el sueldo de un empleado, si las horas trabajadas son iguales a 50 entonces se le paga un sueldo normal, sino, las horas extras se le pagaran al doble.

#include

int p, h, s;

int main ()
{

printf("\nDame el sueldo por hora: ");
scanf("%d", &p);
printf("\nDame el numero de horas trabajadas: ");
scanf("%d", &h);

if (h<=50)
{
s=p*h;
}

else
{
s=(50*p)+(((h-50)*p)*2);
}

printf("\nTu sueldo es de: %d\n\n", s);

}

Código 4: For

#include
main()
{
int sumcalif, i;
float ca, prom;
sumcalif=0;
prom=0;
for(i=0; i<=40; i++)
{
printf("Introduce tu calificación\n");
scanf("%f", &ca);
sumcalif=sumcalif+ca;
prom=sumcalif/i;
}
printf("El promedio es: %f", prom);
}

Código 3: For

Programa que lee los cinco primeros enteros positivos

#include

main()
{
int veces, suma;
suma=0;
for (suma=5, suma<=5; suma--)
{
suma=suma+calif;
printf("%d", suma);
}/*Fin for*/
}/*Fin main*/

Código 2: While

Programa que calcula el sueldo de varios empleados considerando su sueldo por hora y las horas que ha trabajado.

#include

int p, h, s, mas;

int main ()
{

mas=1;

while(mas<=5)
{

printf("\nDame el sueldo por hora: ");
scanf("%d", &p);
printf("\nDame el numero de horas trabajadas: ");
scanf("%d", &h);
s=0;

if (h<=50)
{
s=p*h;
}

else
{
s=(50*p)+(((h-50)*p)*2);
}

mas=mas+1;

printf("\nTu sueldo es de: %d\n\n", s);

}

}

Código 1: While

Programa que lee las calificaciones e imprime cuál fue mayor, menor y el promedio.

#include

float p, c, m, n, s=0, i=0;

int main ()

{

printf("\nDame las calificaciones:\n");
scanf("%f", &c);
n=c;

while(c>=0)
{

if (c<=n)
n=c;

s+=c;
i++;

if (c>=m)
m=c;

scanf("%f", &c);
}

if(s==0)
printf("\nNo hay calificaciones\n");

else
{
p=s/i;
printf("\nEl promedio de las calificaciones es: %.2f", p);
}

printf("\nLa calificacion mayor es: %.2f", m);
printf("\nLa calificacion menor es: %.2f\n", n);
getchar();
}

Pseudocódigo 12

El gobierno del estado de México desea reforestar un bosque que mide determinado numero de hectáreas. Si la superficie del terreno excede a un millón de metros cuadrados, entonces decidirá sembrar de la siguiente manera:
Porcentaje Tipo de árbol
70% Pino
20% Oyamel
10% Cedro
Si la superficie del terreno es menor o igual a un millón de metros cuadrados, entonces deberá sembrar de la siguiente manera:
50% Pino
30% Oyamel
20% Cedro


INICIO
Escribir "escriba la superficie a reforestar"
Leer sup
Si sup>1000000000 entonces
Escribir "Porcentaje Tipo de árbol"
Escribir "20% Oyamel"
Escribir "70% Pino"
Escribir "10% Cedro"
FinSi
Si sup<1000000000 entonces
Escribir "Porcentaje Tipo de árbol"
Escribir "50% Oyamel"
Escribir "30% Pino"
Escribir "20% Cedro"
FinSi
FIN

Pseudocódigo 11

Un hombre desea saber cuanto dinero se genera por concepto de interés sobre la cantidad que tiene en inversión en el banco. Él decidirá reinvertir los intereses siempre y cuando estos excedan $7000 pesos, y e ese caso desa saber cuando dinero tendrá finalmente en su cuenta.

INICIO
Escribir "saldo"
leer saldo
Escribir "porcentaje de interés"
leer int
saldop<-(saldo*int)/100
saldot<- saldop+saldo
si saldot > 7000 entonces
escribe "Te sugerimos seguir invirtiendo"
escribe "Tu saldo es de: ", saldot
sino
escribe "Incrementa tu inversión"
FinSi
FIN

Pseudocódigo 10

Un maestro desea saber qué porcentaje de hombres y qué porcentaje de mujeres hay en un grupo de estudiantes.

INICIO
Escribir "Numero de mujeres"
Leer mujeres
Escribir "Numero de hombres"
Leer hombres
suma<-mujeres+hombres
pm<-(mujeres*100)/suma
ph<-(hombres*100)/suma
Escribir "Porcentaje de hombres", ph
Escribir "Porcentaje de mujeres", pm
FIN

Tarea 14: Funciones declaradas en string.h

String.h es el archivo de cabecera de C que contiene la definición de macros, constantes, funciones y tipos de utilidad para trabajar con cadenas de caracteres y algunas operaciones de manipulación de memoria (el nombre string puede ser algo inapropiado).

Las funciones declaradas en string.h se han hecho muy populares, por lo que están garantizadas para cualquier plataforma que soporte C. Sin embargo, existen algunos problemas de seguridad con estas funciones, como el desbordamiento de buffer (buffer overflow), que hacen que algunos programadores prefieran opciones más seguras frente a la portabilidad que estas funciones ofrecen. Además, las funciones para cadenas de caracteres sólo trabajan con conjuntos de caracteres ASCII o extensiones ASCII compatibles.

Nombres Descripción
memcpy copia n bytes entre dos áreas de memoria que no deben solaparse
memmove copia n bytes entre dos áreas de memoria; al contrario que memcpy las areas deben solaparse
memchr busca un valor a partir de una dirección de memoria dada y devuelve un puntero a la primera ocurrencia del valor buscado o NULL si no se encuentra
memcmp compara los n primeros caracteres de dos areas de memoria
memset sobre escribe un área de memoria con un patrón de bytes dado
strcat añade una cadena al final de otra
strncat añade los n primeros caracteres de una cadena al final de otra
strchr localiza un carácter en una cadena, buscando desde el principio
strrchr localiza un carácter en una cadena, buscando desde el final
strcmp compara dos cadenas numéricamente ('a'!='A')
strncmp compara los n primeros caracteres de dos cadenas numéricamente ('a'!='A')
strcoll compara dos cadenas según la colación actual ('a'=='A')
strcpy copia una cadena en otra
strncpy copia los n primeros caracteres de una cadena en otra
strerror devuelve la cadena con el mensaje de error correspondiente al número de error dado
strlen devuelve la longitud de una cadena
strspn devuelve la posición del primer carácter de una cadena que no coincide con ninguno de los caracteres de otra cadena dada
strcspn devuelve la posición del primer carácter que coincide con alguno de los caracteres de otra cadena dada
strpbrk encuentra la primera ocurrencia de alguno de los caracteres de una cadena dada en otra
strstr busca una cadena dentro de otra
strtok parte una cadena en una secuencia de tokens
strxfrm transforma una cadena en su forma de colación (??)

Fuente: http://es.wikipedia.org/wiki/String.h

Tarea 13: Funciones declaradas en stdio.h

Stdio.h, que significa "standard input-output header" (cabecera estandar E/S), es la librería estándar del lenguaje de programación C el archivo de cabecera que contiene las definiciones de macros, las constantes, las declaraciones de funciones y la definición de tipos usados por varias operaciones estándar de entrada y salida. Por motivos de compatibilidad, el lenguaje de programación C++ (derivado de C) también tiene su propia implementación de estas funciones, que son declaradas con el archivo de cabecera cstdio.

Fuente: http://es.wikipedia.org/wiki/Cstdio

Pseudocódigo 9

Hacer un programa que llene un vector con 30 caracteres, posteriormente deberá contar cuantas vocales hay.


INICIO
v<- 0

dimension n[20]

escribir "escriba una letra del alfabeto"

para b<- 1 hasta 5 Hacer


leer n[b]

FinPara

para b<-1 hasta 5 Hacer
si n[b]='a' entonces

v<- v+1

Sino
si n[b]='o' entonces

v<- v+1

Sino
si n[b]='e' entonces

v<- v+1

sino

si n[b]='i' entonces

v<- v+1

sino

si n[b]='u' entonces

v<- v+1
FinSi

FinSi

FinSi

FinSi
FinSi

FinPara

Escribir "El total de vocales que escribio es:",v
FIN

Pseudocódigo 8

En una tienda de descuento se efectua una promoción en la cual se hace un descuento sobre el valor de la compra total según el color de la bolita que el cliente saque al pagar en caja. Si la bolita es de color blanco no tiene descuento, si es verde se le descuenta un 10%, si es amarilla un 25%, si es azul un 50% y si es roja un 100%. Determinar la cantidad final que el cliente debe pagar por su compra.

INICIO
descuento<- 0;
escribir "escriba el monto total a pagar:";

leer total;

escribir "escriba el color de la bolita de oferta segun las siguientes opciones (debe ingresar solo el numero de la opcion):";

Escribir "1: blanco";

Escribir "2: verde";

Escribir "3: amarillo";

Escribir "4: azul";

Escribir "5: rojo";

leer color;

Segun color Hacer

1:
escribir "no hay descuento el mionto a pagar es:",total;
2:

descuento<- total-(total*0.1);
Escribir "hay un descuento del 10% el monto a pagar es de: ",descuento;
3:
descuento<- total-(total*0.25);

Escribir "hay un descuento del 25% el monto a pagar es de: ",descuento;

4:

descuento<- total-(total*0.50);

Escribir "hay un descuento del 50% el monto a pagar es de: ",descuento;
5:

escribir "hay un descuento del 100% por lo que no hay cobro";

De Otro Modo:
Escribir "color incorrecto";
FinSegun
FIN

Pseudocódigo 7

Llenar un vector de 20 numeros enteros y posteriormente copiar el vector de manera inversa en un segundo vector.

INICIO
Para i<1 hasta 20 hacer
escribir "Anote su numero"
leer normal[i]
FinPara
Para j<20 hasta 2 hacer
inverso[j]<-normal[i]
i<-i+1
FinPara
Para j<-1 hasta 20 hacer
escribir inverso[j]
FinPara
FIN

Pseudocódigo 6

Llenar un vector con 50 numeros enteros y posteriormente encontrar el numero mayor y menor del arreglo.

INICIO
dimension num[50]
Para i<-1 hasta 5 hacer
escribir "Dame el numero", i
leer num[i]
mayor<-num[i]
menor<-num[i]
FinPara

para i<-1 hasta 5 hacer
si num[i]>mayor entonces
mayor<-num[i]
FinSi
si num[i]< menor entonces
menor<-num[i]
FinSi

Escribir "El numero mayor: ", mayor
Escribir "El numero menor: ", menor
FIN

Pseudocódigo 5

Escriba un programa que calcule el sueldo de un empleado con las siguientes condiciones:
a) Si el empleado trabajo 40 horas entonces su pago mensual sera el sueldo base mas un 15% del sueldo base.
b) Si el empleado trabajo menos de 4 horas entonces su pago mensual será solo el sueldo base
c) Si el empleado tuvo 5 faltas entonces a su pago se le descontará el 5%
d) Si el cempleado tuvo menos de 5 faltas entonces a su pago se le descontará un 3% de su sueldo base
e) Si el empleado tuvo mas de 5 faltas se le despide.

INICIO
Dimension total (6);
veces<- 0;
repeticion<- 0;
Mientras veces<5 Hacer
veses<- veces+1;
escribir "Escriba los datos del empleado: ",veces;
escribir "Escriba el salario base:";
leer sueldo;
escribir "escriba el total de horas que laboro:";
leer horas;
escribir "escriba el numero de faltas que tenido:"
leer faltas;
Si faltas>5 Entonces
escribir "Esta despedido!";
total[veces]<- 0;
Sino
Si faltas=5 Entonces
descuento<- sueldo-(sueldo*.05);
Sino
descuento<- sueldo-(sueldo*.03);
FinSi
Si (horas>= 40) Entonces
aumento<- descuento+(descuento*.15);
total[veces]<- aumento;
escribir "su sueldo es de: ",sueldo;
escribir "debido a que tubo ",faltas," faltas tendra un descuento y su sueldo sera de: ",descuento;
escribir "gracias a que ha tenido mas de 40 horas laborando tendra un aumento y su sueldo es:--",aumento,"$--";
sino
total[veces]<- descuento;
escribir "su sueldo es de: ",sueldo;
escribir "debido a que tubo ",faltas," faltas tendra un descuento y su sueldo sera de: ",descuento;
FinSi
FinSi
FinMientras
Mientras repeticion<5 Hacer
repeticion<- repeticion+1;
escribir "el salario del empleado ",repeticion," es: ",total[repeticion],"$";
FinMientras
FIN

Pseudocódigo 4

Escriba un programa que pida al usuario 5 numeros, los almacene en un arreglo y posteriormente los copie en otro arreglo que se imprimirá al final


INICIO
Dimension arreglo[20]

Dimension sustituir[20]

i<- 0

sus<- 5;

escribir 'Escriba 5 numeros'

para a<- 1 hasta 5 hacer

leer arreglo[a]

FinPara
Repetir
i<- i+1

arreglo[i]<- sustituir[sus]

sus<- sus-1

hasta que i >=5

escribir "El arreglo queda así: "

para b<- 1 hasta 5 hacer

escribir arreglo [b]

FinPara
FIN

Pseudocódigo 3

Escriba un algorítmo que divide dos numeros, considerando la división entre cero.

INICIO
Escribir "Escriba dos numeros"
Escribir "Escriba el divisor"
leer a;
Escribir "Escriba el dividendo"
leer b;
Si a=0 Entonces
Escribir "No es p�sible dividir por 0";
Sino
f<- a/b;
escribir "el resultado es:"
escribir f;
FinSi
FIN

Pseudocódigo 2

Escriba un algorítmo que lea cinco números que se le pedirán al usuario

INICIO
escribir "Escriba 5 numeros";

Leer a,b,c,d,e;

f<- a-3;

g<- b-3;

h<- c-3;

i<- d-3;

j<- e-3;

Escribir "Los numeros que escribió fueron: "

Escribir f,g,h,i,j;
FIN

Pseudocódigo 1

Hacer un algorítmo para resolver el siguiente problema, leer 10 calificaciones, calcular el promedio, encontrar la calificación mayor y la calificación menor. Utiliza las tres estructuras iterativas.

INICIO
sum_c<-0

Escribir "Introduce la calificacion"
Leer cal
calM<-cal
calme<-cal
Para ncal<-9 hasta 19
sum_c<-sum_c+cal
Escribir "Introduce la calificacion"
Leer cal
Si ( cal > calM ) entonces
calM<-cal
sino
Si ( cal < calme ) entonces
calme<-cal
Fin_si
Fin_si
Fin_para
promedio<-suma/cal
Escribir "El promedio es: ", promedio
Escribir "La calificacion mayor es: ", calM
Escribir "La calificacion menor es: ", calme
FIN

Tarea 12: Codigos de Formato

Son códigos que se asocian con los tipos de datos contenidos en las variables:

Código

Formato

%d

Un entero

%i

Un entero

%c

Una caracter

%s

Una cadena

%f

Un real

%ld

Entero largo

%u

Decimal sin signo

%lf

Doble posición

%h

Entero corto

%o

Octal

%x

Hexadecimal

%e

Notación Científica

%p

Puntero

%%

Imprime Porcentaje

Tarea 11: Secuencias de Escape en C


Carácter de Escape

Explicación

\n

Simula un Enter. Se utiliza para dejar una línea de por medio

\t

Tabulador horizontal. Mueve el cursor al próximo tabulador

\v

Tabulador vertical.

\a

Hace sonar la alarma del sistema

\\

Imprime un carácter de diagonal invertida

\?

Imprime el carácter del signo de interrogación

\"

Imprime una doble comilla

Ejemplos:

1) printf("Manuel \n Antonio \n Ortez\n\n);

2) int x=15;

printf("El Valor de la variable es %d\n\n", x);

3) float x=8.5689, pi=3.1416;

printf("El valor de x es %.2f\t\n",x);

printf("\t Y el valor de pi es %.2f\n\n", pi);


Fuente: http://www.monografias.com/trabajos33/programacion-lenguaje-c/programacion-lenguaje-c.shtml


Tarea 10: Funciones getchar() y putchar()

Getchar

Devuelve un valor Char que representa el carácter que se encuentra en el índice especificado de la cadena suministrada.


Putchar

La función putchar retorna el carácter escrito. Esta función es equivalente a putc.

A continuación un ejemplo con ambas funciones:
int main()
{
char c; /* variable para almacenar los caracteres introducidos por el usuario */
char enunciado[ 80 ]; /* crea un arreglo de caracteres */
int i = 0; /* inicializa el contador i */

/* indica al usuario que introduzca una línea de texto */
puts( "Introduzca una linea de texto:" );

/* utiliza getchar para leer cada caracter */
while ( ( c = getchar() ) != 'n') {
enunciado[ i++ ] = c;
} /* fin de while */

enunciado[ i ] = '�'; /* termina la cadena */

/* utiliza puts para desplegar el enunciado */
puts( "nLa linea introducida es :" );
puts( enunciado );

return 0; /* indica terminación exitosa */

} /* fin de main */


Tarea 9: Tipos de Datos en C

Tipos de datos básicos

Caracteres char
Números enteros int
Números en coma flotante (32 bits) float
Números en coma flotante de doble precisión (64 bits) double
Tipo nulo void
Punteros Direcciones de memoria
Arrays Como en Pascal
Estructuras Como los registros de Pascal.
Uniones Variables que pueden contener datos de distintos tipos.

Fuente:

elvex.ugr.es/decsai/c/apuntes/tipos.pdf

Tarea 8: Palabras Reservadas

Son palabras especiales que no pueden usarse para nombrar otros elementos del lenguaje. En el capítulo anterior vimos algunas de ellas, como int y float. El número de palabras reservadas en C es significativamente menor que el de otros lenguajes. En Turbo C hay 43, algunas más en Turbo C++ y menos en ANSI C. Durante el resto de capítulos se irán conociendo.

Es preciso insistir en que C hace distinción entre mayúsculas y minúsculas. Por lo tanto, la palabra reservada for no puede escribirse como FOR, pues el compilador no la reconoce como una instrucción, sino que la interpreta como un nombre de variable.


Fuente:

http://html.rincondelvago.com/lenguaje-c.html

Tarea 7: Identificadores en C

Son los nombres dados a variables, funciones, etiquetas u otros objetos definidos por el programador. Un identificador puede estar formado por:

  • Letras (mayúsculas o minúsculas)

  • Números

  • Carácter de subrayado

con la condición de que el primer carácter no sea un número.

Ejemplos de identificadores válidos son:

Precio_Venta

Num1

_123

D_i_5

No son válidos:

Precio Venta Lleva un espacio en blanco

1Num Empieza por un número

Precio-Venta Lleva un guión

De un identificador sólo son significativos los 32 primeros caracteres.


Fuente:
http://html.rincondelvago.com/lenguaje-c.html

Tarea 6: Diagrama de Flujo de Repetir Hasta

Se utiliza cuando se desconoce el número de veces que se repetirán las acciones, este depende del valor de una condición.
El ciclo se repite mientras el valor de la condición sea falso. La condición puede ser simple o compuesta. Al utilizar Repetir_Hasta se ejecuta el siguiente ciclo:







Investigación 1: Editores de Texto en Linux

Editor ed

El editor ed fue hecho con la idea de tener un editor rápido y pequeño con lo mínimo indispensable. Es, además, un editor confiable y que puede ser usado en las peores condiciones: con terminales lentas, en conexiones por modem y, quizá la más interesante, desde archivos por bloques. La mayoría de los editores asumen que toman la entrada directa desde el teclado y que controlan una terminal, por esto no pueden ser empleados como ed.
Para invocar a este editor se utiliza la orden: ed fichero, si existe fichero, copia el contenido del mismo en la memoria y muestra el tamaño del fichero en caracteres. Si el fichero no existe, señala que el buffer asignado al fichero está vacío. En ambos casos el editor queda en modo orden.


Editor de Pantallas Vi

El editor vi es un editor de pantalla completa.De forma similar a ed, el editor vi siempre trabaja con una copia del fichero que se edita, que él mismo se encarga de mantener en un buffer. Los cambios realizados sobre el fichero solo se graban cuando se invoca algún comando de grabación.Para invocar el editor vi se hace mediante: vi fichero. Si el fichero existe lo carga en el buffer de trabajo.Además, la orden para invocar el editor vi tiene una serie de opciones, las más importantes son:

r Cada cierto tiempo `vi' salva el buffer de edición en disco. De forma que si se produce cualquier fallo en el sistema, siempre se encontrará una copia reciente del fichero que se editaba.

R Indica que solo se editará el archivo para consulta. No permitiéndose realizar cambio alguno sobre la información.

wn Normalmente `vi' utiliza la pantalla completa como ventana de edición. Mediante esta opción se podrá alterar el tamaño de la ventana de edición a un número de líneas determinado por n.

Fuente:

http://html.rincondelvago.com/editores-de-texto-en-linux.html

http://www.marquezetelecom.com/LuCAS/Tutoriales/UXO/uxo/node20.html

Tarea 5: Operadores y Expresiones en C

El lenguaje C posee un gran número de operadores que se pueden agrupar en diferentes categorías, los datos sobre los que actúan los operadores se denominan operandos. Algunos operadores requieres dos operandos, mientras que otros actúan sólo sobre un operando.


Operadores Aritméticos
En C, existen cinco operadores aritméticos:
Los operadores (/) y (%) requieren que el segundo operando no sea nulo.



Operadores Unarios

C incluye una serie de operadores que actúan sobre un solo operando para producir un nuevo valor. Estos operadores se denominan operadores unarios o monarios. Los operadores unarios suelen preceder a su único operando.

Es probable que el operador unario de uso más frecuente sea el menos (-) unario, que consiste en el menos elante de una constante numética, una variable o una expresión. La operación menos unaria es distinta del operador aritmético que representa a la resta (-) ya que la resta requiere de dos operandos.



Operadores Relacionales y Lógicos

En C existen cuatro operadores relacionales:


Estos operadores se encuentran dentro del mismo grupo de procedencia que es menor que la de los operadores unarios y aritméticos. La asociatividad de estos operadores es de izquierda a derecha.


Muy asociados a los operadores relacionales, existen los operadores de igualdad:

Los operadores de igualdad se encuentran en otro grupo de procedencia, por debajo de los operadores relacionales. La asociatividad de estos operadores es también de izquierda a derecha. Éstos se utilizan para formar expresiones lógicas que representan condiciones que pueden ser verdaderas o falsas. La expresión resultante puede ser de tipo enterio, ya que verdadero es representado por 1 y falso por 0.

Oeradores de Asignación

Existen en C, varios operadores de asignación que se utilizan para formar expresiones de asignación, en las que se asigna el valor de una expresión a un identificador.
El operador de asignación más usado es =. Se escribe de la siguiente forma:











Bibliografía: "Programación en C", Byron, Gottfried, Ed. Mac Graw Hill, Madrid, 2005.




Tarea 4: Reglas para Declarar Variables

Una variable es un espacio de memoria donde se almacena un dato, los nombres de las variables han de construirse con caracteres alfanuméricos y el caracter subrayado (_). Deben comenzar con un caracter alfanumérico o (_). No podemos utilizar caracteres raros como el signo +, un espacio, o un $. Se evita nombrar variables utilizando nombres reservados como for o return.
Todo elemento declarado tiene un nombre también denominado identificador. Ese elemento debe comenzar por un caracter alfabético o signo subyarado, solo puede contener caracteres alfabéticos, digitos decimales y signos de subrayado. Debe contener por lo menos un caracter alfanumérico si empieza con (_), algunos nombres no se distinguen entre mayúsculas y minúsculas y no puede declarar dos variables globales con el mismo nombre.

Tarea 3: Clasificación de Lenguajes de Programación

Los lenguajes de programación son un conjunto de símbolos y reglas para combinar dichos símbolos. Los elementos del lenguaje de programación son léxicos, sintáxicos y semánticos.

Los lenguajes de programación pueden clasificarse por su propósito, es decir, el tipo de problemas a tratar con ellos o por estilo de programación.

Por propósito:

- General: Aptos para todo tipo de tareas, por ejemplo "C".
- Específico: Hechos para un objetivo muy concreto, por ejemplo Csound (para crear ficheros de audio).
- Programación de Sistemas: Para realizar sistemas operativos o drivers, por ejemplo "C".
- Script: Para realizar tareas varias de control y auxiliares. Antiguamente eran los llamados lenguajes de procesamiento por lotes (batch) o JCL (Job Control Languages). Se subdividen en varias clases. Ejemplos: bash (shell), Java Script.


Por estilo de programación:

-Imperativos: Indican cómo hay que hacer la tarea, es decir, expresan los pasos a realizar, como ejemplo esta "C".
-Declarativos: Indican qué hay que hacer, por ejemplo Lisp y Prolog.
Fuente: http://qbitacora.wordpress.com/2007/09/21/clasificacion-de-lenguajes-de-programacion/

Tarea 2: Memoria Flash

Chip de memoria que mantiene su contenido sin energía, pero que se deben borrar a granel. Fue concebido originalmente por Toshiba, el término viene de la capacidad de poderse borrar <>. Derivado de EEPROMS*, los chips de memoria flash son menos caros y proporcionan densidades más altas de bits.
Como los diseños futuros proporcionan borrado de chips pero no en su totalidad, y últimamente, borrado byte por byte, la memoria flash puede proporcionar una alternativa de la RAM actual.
*EEPROM (Ellectricaly Erasable Programmable Read Only Memory), Memoria de solo lectura programable y borrable eléctricamente. Un chip de memoria que retiene su contenido sin potencia, puede ser borrado tanto dentro de la computadora, como externamente, y usualmente requiere más voltaje para el borrado que el común de +5 voltios usado en los circuítos lógicos. Funciona como RAM no volátil, pero grabar en EEPROM es mucho más lento que grabar en RAM. Las EEPROM son usadas en dospositivos que deben mantener datos al día sin potencia.
Por ejemplo: En una terminal de punto de venta que esta apagada por la noche. Cuando los precios cambian, la EEPROM puede actualizarse desde una computadora central durante el día.
Bibliografía: "Diccionario de la Computación", Freedman, Allan, Editorial Mac Graw Hill, 1995.

Tarea 1: Memoria Caché


La memoria caché es una sección reservada de la memoria, que se utiliza para mejorar el rendimiento. Un caché de disco es una porción reservada en la memoria normal o memoria adicional en la tarjeta controladora de disco. Cuando el disco es leido, se copia un gran bloque de daros en el caché. Si los requisitos de los datos subsiguientes pueden ser satisfechos por el caché, no se necesita el empleo de un acceso a disco que es más lento. Si el caché es utilizado para escritura, los datos se alinearán en memoria y se grabarán en el disco en bloques más grandes.


Los cachés de memoria son bancos de memoria de alta velocidad entre la memoria normal y la CPU. Los bloques de instrucciones y datos se copian en el caché, y la ejecución de las instrucciones y la actualización de los datos son llevados a cabo en la memoria de alta velocidad.


Bibliografía: "Diccionario de la Computación", Freedman, Allan, Editorial Mac Graw Hill, 1995.