Está en la página 1de 5

/*Algoritmo: Combinar correspondencia.

Entradas: Destinatario/s, Gastos, Descripcin de Gastos, $ Pedidos, Remitente Salida: Carta combinada con los valores de entrada. 1. 2. 3. 4. 5. Ingresar datos por usuario elegir y combinar carta y variables formatear carta combinada imprimir Iterar esperando nuevos Remitentes

1.1 Ingresar Titulo y Destinatario/s validando que el primero pertenezca al co njunto ("Querida","Querido","Queridas","Queridos") 1.2 Ingresar Gastos (validar ingreso nros positivos) 1.3 Ingresar Descripcin de Gastos 1.4 Ingresar $ Pedidos (Validar ingreso nros positivos) 1.5 Ingresar Remitente 1.1.1 Ingresar Ttulo (Querido, Querida, Queridos, Queridas) 1.1.2 Validar que pertenezca al conjunto ("Queri..."...), sino vuelve a ingresarlo 1.1.3 Ingresar Destinatario/s 2.1 Reemplazar 2.2 Reemplazar 2.3 Reemplazar 2.4 Reemplazar suario 2.5 Reemplazar 2.6 Reemplazar Titulo en la carta con el valor ingresado por el usuario Destinatario en la carta con el valor ingresado por el usuario Gastos en la carta con el valor ingresado por el usuario Descripcin de Gastos en la carta con el valor ingresado por el u $ Pedidos en la carta con el valor ingresado por el usuario Remitente en la carta con el valor ingresado por el usuario

3.1 Subrayar el Destinatario (Doble lnea en toda su longitud) 3.2 Verificar Pluralidad y Gnero. *NO 3.3 Justificar el texto, Ajustando los mrgenes a 80 caracteres. 3.2.1 Para el contenido general se verifica analizando la primera palabra "Querid...", no se verifica el gnero pues se utiliza frases ambiguas para M o F. 3.2.2 Vericar Pluralidad de los Pesos Pedidos. Para ello se tiene en cuenta el monto adicional solicitado. 4.1 Verifica si los datos ingresados son correctos, si no son correctos reinic ia ciclo 4.2 Si son correctos imprime la carta combinada 5.1 Consulta si desea imprimir ms cartas (Si-No). Cuando el usuario elige Si vuelve a comenzar el ciclo principal del programa. ***************************************************************************** * Programa Combina_Carta() * Algoritmos * * El algoritmo combina una carta existente con datos ingresador por el usuario * Verifica los datos ingresados, Ajusta plurales, Formatea texto. * * * Generalidades: * "@" - Se utiliza para sealar que se debe reemplazar una cadena * "#" - Se utiliza para sealar que se debe reemplazar un nmero

* "/" - Se utiliza para senalar nueva lnea * Estos smbolos no son validados en los datos que ingresa el usuario. * * donde: gcSalir = Global. Se utiliza para la captura de las Salidas * cCartaP = Contiene el texto constante de carta en Plural * cCartaS = Contiene el texto constante de carta en Singular * cTitulo = Contiene el Ttulo del Destinatario (Queri da/o/as/os) * cDestino = Contiene el Nombre del Destinatario * cRemite = Contiene el Nombre del Remitente * cDescGastos = Contiene Descripcin de los gastos * cCartaSalida = Guarda el texto de la Carta Mezclado y format eado * cCartaTemp = Guarda informacin Temporal de la carta seleccionada * cTemp = Datos temporales * ncntCad = Contador de Reemplazos de Cadenas * ncntValor = Contador de Reemplazos de Nmeros * I,J = Contadores genricos para ciclos * nGastos = Contiene el Monto gastado * nPesosPedidos = Contiene el Monto solicitado * * *****************************************************************************/ #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> void Hace_una_Carta(void) ; char gcSalir='N'; void main (void) /*Ciclo principal*/ { do{ /*Ejecuta subrutina Hace_una_Carta()*/ Hace_una_Carta(); /*Inicia Consulta para continuar*/ printf("\n\n Desea Imprimir otra Carta ? (S/N): "); scanf("%[SNsn]",&gcSalir); fflush(stdin); /*Finaliza Consulta para continuar*/ } while((gcSalir == 'S') | (gcSalir == 's')); } void Hace_una_Carta(void) { char cCartaP[1000]="\0",cCartaS[1000]="\0"; char cTitulo[20]="\0",cDestino[50]="\0",cRemite[20]="\0",cDescGa stos[50]="\0"; char cCartaSalida[1000]="\0",cCartaTemp[1000]="\0",cTemp[1000]="\0"; unsigned int ncntCad,ncntValor,I,J; long int nGastos,nPesosPedidos; /*Inicio asignacin de valores iniciales*/ nGastos=0;

nPesosPedidos=0; ncntCad = 0 ; ncntValor = 0 ; /*Asigna Carta en Plural a variable CartaP*/ strcpy(cCartaP,"@ @: /@/") ; strcat(cCartaP," Los $ # que me dieron para mis g atos en el campamento") ; strcat(cCartaP , " ya se han agotado. La mayor parte en @. Piens an que me podran"); strcat(cCartaP , " enviar $ # @ ?/"); strcat(cCartaP , " Los recuerdo muc ho. Carios/"); strcat(cCartaP , " @."); /*Asigna Carta en Singular a variable CartaS*/ strcpy(cCartaS, "@ @: /@/") ; strcat(cCartaS , " Los $ # que me diste para mis ga tos en el campamento"); strcat(cCartaS , " ya se han agotado. La mayor parte en @. Piens as que me podras"); strcat(cCartaS , " enviar $ # @ ?/"); strcat(cCartaS , " Te recuerdo much o. Carios/"); strcat(cCartaS , " @."); /*Finaliza asignacin de valores iniciales*/ /*Inicia Ingreso de datos por usuario*/ clrscr(); while ((strcmp(cTitulo,"Querida")!=0) && (strcmp(cTitulo,"Queridas")! =0) && (strcmp(cTitulo,"Querido")!=0) && (strcmp(cTitulo,"Queridos")!=0)) { printf("\n Ingresar Titulo para Destinatario/s (Querida / Queridas / Querido / Queridos): ") ; gets(cTitulo); } printf("\n Ingresar Destinatario/s: "); gets(cDestino); printf("\n Ingrese Remitente: "); gets(cRemite); while(nGastos <= 0) { printf("\n Ingresar Monto de Gastos $: "); scanf("%li",&nGastos); } fflush(stdin); printf(" \n Ingresar Descripcin de Gastos (solo la/s compra/s): " ); gets(cDescGastos); while(nPesosPedidos <= 0) { fflush(stdin);

printf("\n Ingresar Monto Solicitado $: "); scanf("%li",&nPesosPedidos); } fflush(stdin); /*Fin Ingreso de datos por usuario*/ /*Inicia Eleccion de Carta, Singular o Plural*/ strcpy(cCartaTemp,cCartaP); if ((strcmp(cTitulo,"Querida")==0) | (strcmp(cTitulo,"Querido")==0) ) strcpy(cCartaTemp,cCartaS); /*Finaliza Eleccion de Carta*/ /*Inicia Combinacin y Subrayado de Titulo y Destino*/ for (I=0;I<strlen(cCartaTemp);I++) { cTemp[0] = cCartaTemp[I]; cTemp[1] = '\0'; if (cCartaTemp[I]=='@') { ncntCad++; switch (ncntCad) { case 1 : strcat(cCartaSalida,cTit ulo); break; case 2 : strcat(cCartaSalida,cDes tino); break; case 3 : for (J=0 ; J<=((strlen(cTitulo) + strlen(cDestino))) ; J++) cCartaSalida[strlen(cCartaSalida)]='='; cCartaSalida[strlen(cCartaSalida)]='\0'; break; case 4 : strcat(cCartaSalida,cDes cGastos); break; case 5 : strcat(cCartaSalida,"Adi cional"); if (nPesosPedidos > 1) s trcat(cCartaSalida,"es"); break; case 6 : strcat(cCartaSalida,cRem ite); break; } } else { if (cCartaTemp[I]=='#') { ncntValor++;

switch (ncntValor) { case 1 : itoa(nGastos, cTemp, 10) ; break; case 2 : itoa(nPesosPedidos, cTem p, 10); break; } strcat(cCartaSalida,cTemp); } else cCartaSalida[strlen(cCartaSalida)]=cCartaTe mp[I]; } cCartaSalida[strlen(cCartaSalida)]='\0'; } /*Finaliza Combinacin y Subrayado de Titulo y Destino*/ /*Inicia Verificacion de datos ingresados*/ clrscr(); printf("\n Controle los datos ingresados"); printf("\n\n Titulo y destinatario: %s %s",cTitulo,cDestino); printf("\n Remitente............: %s",cRemite); printf("\n Monto de Gastos $....: %i",nGastos); printf("\n Descripcin de Gastos: %s",cDescGastos); printf("\n Monto Solicitado $...: %i",nPesosPedidos); printf("\n\n\n La informacin es Correcta ? (S/N): "); fflush(stdin); scanf("%[SNsn]",&gcSalir); fflush(stdin); /*Finaliza Combinacin y Subrayado de Titulo y Destino*/ /*Inicia Impresin de Carta*/ if ((gcSalir == 'S') || (gcSalir == 's')) { clrscr(); printf("\n\n\n "); for (I=0;I<strlen(cCartaSalida);I++) { if (cCartaSalida[I] == '/') printf("\n "); else printf("%c",cCartaSalida[I]); } } /*Finaliza Impresin de Carta*/ }

También podría gustarte