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.

soundex.c

#include
#include

char *nombre[] = {
"BFPV",
"CGJKQSXZ",
"DT",
"L",
"MN",
"R",
"AEIOUHWY"};

main(){
char cadena[21];
puts("Oh!");
while(1){
scanf("%s", cadena);
puts("Leyendo");
if(cadena[strlen(cadena)]=='Y'){
puts("If");
funcion(cadena);
break;
}
else
puts("else");
funcion(cadena);

}
}

void funcion(char cadena[21]){
int i = 0;
int j;
char *res = "";

while(cadena[i]!='\0'){
for(j=0; j<6; i =" 0;" i =" 0;" else="">='1' && res[i]<'7')
putchar(res[i]);
}

}

10 Razones para No Usar Linux

*En las reuniones matinales entorno a la máquina de café se habla de los últimos virus sufridos por todo el mundo, menos usted, y se siente por ello marginado.

*La ausencia de estrés y de cabreos enfurecedores delante de su ordenador le está convirtiendo en una blanda, plácida y sebosa bola de grasa, mientras que sus compañeros se mantienen tensos y alerta todo el día, estallando en un torbellino irascible a la menor ocasión. Usted envidia su combatividad.

*Al no tener que recordar números de serie, claves, keywords, códigos de registro y períodos de evaluación, su memoria se está deteriorando preocupantemente. Sus compañeros, en cambio, recuerdan cientos de útiles y vitales códigos de registro, los cuales intercambian placenteramente, sin que usted pueda participar de su gozo.

*La falta de impactantes pantallazos azules está atrofiando el pigmento azul de su retina, por lo que su oculista le ha recomendado que mire fijamente durante varias horas al día al logotipo de IBM. Sus compañeros, en cambio, han hiperdesarrollado su pigmento azul y pueden, de hecho, ver en la oscuridad.

*En caso de una invasión de seres extraterrestres ultraviolentos (como sucede a menudo) , no podrá, tal como ocurre en “Independence Day”, instalar Outlook en la nave principal de los invasores y de este modo destruir su civilización.

*Al ser usted usuario de Linux no tiene ninguna excusa para reiniciar su ordenador docenas de veces al día, y observa con envidia como sus compañeros conversan amigablemente en los pasillos durante sus placenteros reinicios, mientras usted se ve obligado -injustamente- a ser productivo todo el tiempo.

*El dinero que los demás emplean tan provechosamente en licencias, soportes, períodos de renovación y derechos de utilización, usted lo malgasta en ir al cine, en cenas, y en alcohol, lo cual está deteriorando su salud enormemente.

*Al no ser usted usuario de Windows, ningún amigo le llama para que emplee toda una tarde del fin de semana en reinstalar su ordenador, de modo que se aburre mortalmente mientras sus compañeros disfrutan agradablemente de sus relaciones sociales. Sera usted un marginado ya que pasara todas las tardes en su casa tumbado en el sofá sin nada que hacer.

*Se ve obligado a leer todos los correos que le envía su jefe, sin tener acceso al derecho universal de uso de la utilísima frase ‘El Outlook no me deja abrirlo’, que sus compañeros tanto disfrutan, si no que tendrá que leer todas esas patochadas.

*El botón de reset de su ordenador está acumulando alarmantes cantidades de suciedad. ¿No querrá molestarse en limpiarlo verdad?

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]);
}

}