Glaas2

Ejercicios Progra_18-i

Jun 15th, 2018
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.98 KB | None | 0 0
  1. //////////////////////////// LISTAS Y OPERACIONES CON LISTAS /////////////////////////////
  2.  
  3. como el código de listas y eso es muy largo, lo pongo aparte en esta dirección:
  4. http://tiny.cc/ListasProgra18i
  5. o en esta otra
  6. https://pastebin.com/CytiLRLn
  7.  
  8. //////////////////////////////// TAREA 5 //////////////////////////////////////////////////
  9. /**        Tarea N°5
  10. ** Desarrollar función que "resta" las letras de cadena B de la cadena A.
  11. ** La función resta_cad copia a C todo contenido de A excepto aquellos símbolos que se encuentran en B.
  12. ** La función main debe pedir del operador contenido de A y de B, luego llamar resta_cad para construir C
  13. ** y luego imprimir contenido de resultante cadena C.
  14. ** Alumno: Guerra Esquivel Angel        correo: [email protected]
  15. ** Grupo: CTG04     Matrícula: 2173038752
  16. **/
  17.  
  18. #include "stdafx.h"
  19.  
  20. #define TAM_A 50
  21. #define TAM_B 50
  22.  
  23. void restar_cad(char *pA, char *pB, char *pC);
  24.  
  25. int main()
  26. {
  27.     char A[TAM_A], B[TAM_B], C[TAM_A];
  28.  
  29.     printf("Ingrese una cadena 'A' de max. 20 caracteres: ");
  30.     fflush(stdin);
  31.     gets_s(A);  // uso la nueva implementación de gets porque no me deja usar la anterior
  32.     printf("Ingrese una cadena 'B' de max. 20 caracteres: ");
  33.     fflush(stdin);
  34.     gets_s(B);
  35.     restar_cad(A,B,C);
  36.     puts(C);
  37.     return 0;
  38. }
  39.  
  40.  
  41. void restar_cad(char *pa, char *b, char *pc)
  42. {
  43.     char *pb; // solo declaro este puntero a parte porque es el que cambiará de valor
  44.  
  45.     pb = b;
  46.  
  47.     while (*pa != '\0')        // por alguna razón en el debugger, compara los elementos nulos de la cadena
  48.     {                        // hace un recorrido de la cadena A comparando cada elemento con todos los elementos
  49.                             // de la cadena B, si son iguales, sólo descarta esa letra y aumenta la posición del
  50.                             // arreglo A y vuelve a comparar      
  51.         while (*pb != '\0')
  52.         {
  53.  
  54.  
  55.             if (*pa == *pb)
  56.             {
  57.                 pa++;        // si son iguales, salta esa letra y reinicia la posicion del arreglo B
  58.                 pb = b;
  59.             }
  60.             else
  61.                 pb++;        // si no son iguales, checa el siguiente elemento
  62.         }
  63.                         // si recorrió el arreglo B y ninguno fue igual, entonces asigna la letra al arreglo C
  64.         *pc = *pa;
  65.         pc++;      
  66.         pb = b;        // reinicia la posición del arreglo B para buscar otra vez
  67.         pa++;        // busca en el siguiente elemento del arreglo A
  68.     }
  69.  
  70.     *pc = '\0';        // al copiar todas las letras, agrega el elemento nulo para poder usar puts
  71. }
  72. ////////////////////////////////////////// FUNCIONAMIENTO DE ESTRUCTURAS CON PUNTEROS /////////////////////
  73. /////////////  programa que crea una "agenda telefonica" de 5 elementos
  74.  
  75. #include "stdafx.h"
  76. #include <stdio.h>
  77. #include <stdlib.h>
  78.                                 //typedef genera un sinónimo para un tipo de dato, o sea, en vez de escribir al declarar una variable de tipo estrucura, solo escribes el sinónimo
  79.                                 //por ejemplo en vez de escribir struct Registro reg1  (variable llamada reg1 de tipo struct Registro), solo escribes registro reg1
  80. typedef struct Registro{    
  81.     char nombre[15];
  82.     char apellidos[25];
  83.     char direccion[40];
  84.     char cod_pos[8];
  85.     char tel[15];
  86.     char email[30];
  87.     char facebook[30];  
  88. }registro; // sinónimo que queremos
  89.  
  90. int main()
  91. {
  92.     int exit=0, i;
  93.     registro reg[3]; // arreglo de 3 elementos de tipo struct Registro
  94.     registro *ap;  // apuntador a tipo de dato registro o tipo de dato struct Registro
  95.     do
  96.     {
  97.  
  98.         ap=reg;  // el apuntador apunta al primer elemento del arreglo de estructuras
  99.         for(i=0;i<3;i++)
  100.         {
  101.             printf("\n AGENDA, REGISTRO #%d\n", i+1);
  102.             printf("Ingrese el nombre: ");
  103.             setbuf(stdin, NULL);  // esto es para "limpiar" el buffer de entrada, para que no entre basura en la cadena que se escriba
  104.             gets(reg->nombre);   // cuando se usan apuntadores, para acceder al elemento ya no es *ap si no ap-> cuando se trata de estructuras
  105.             printf("Ingrese los apellidos: ");
  106.             setbuf(stdin, NULL);
  107.             gets(reg->apellidos);
  108.             printf("Ingrese el direccion: ");
  109.             setbuf(stdin, NULL);
  110.             gets(reg->direccion);
  111.             printf("Ingrese el codigo postal: ");
  112.             setbuf(stdin, NULL);
  113.             gets(reg->cod_pos);
  114.             printf("Ingrese el telefono: ");
  115.             setbuf(stdin, NULL);
  116.             gets(reg->tel);
  117.             printf("Ingrese el email: ");
  118.             setbuf(stdin, NULL);
  119.             gets(reg->email);
  120.             printf("Ingrese el facebook: ");
  121.             setbuf(stdin, NULL);
  122.             gets(reg->facebook);
  123.             ap++; // se mueve una posicion, ahora apunta a reg[i+1]
  124.         }
  125.         ap=reg; // se vuelve a apuntar ap al inicio del arreglo de registro
  126.         for(i=0;i<3;i++)
  127.         {
  128.             printf("\n");
  129.             printf("\n AGENDA, REGISTRO #%d\n", i+1);
  130.             printf("Nombre: %s \n", reg->nombre);
  131.             printf("Apellidos: %s\n", reg->apellidos);
  132.             printf("Direccion: %s\n", reg->direccion);
  133.             printf("Codigo Postal: %s\n", reg->cod_pos);
  134.             printf("Telefono: %s\n", reg->tel);
  135.             printf("Email: %s\n", reg->email);
  136.             printf("Facebook: %s\n", reg->facebook);
  137.             printf("\n");
  138.             ap++;
  139.         }
  140.  
  141.         exit=1;
  142.     }while(exit!=1);
  143.     return 0;
  144. }
  145. //////////////////////////////////////// FUNCIONAMIENTO ESTRUCTURAS SIN PUNTEROS //////////////////////////
  146. /////////////  programa que crea una "agenda telefonica" de 3 elementos y luego la imprime
  147.  
  148. #include "stdafx.h"
  149. #include <stdio.h>
  150. #include <stdlib.h>
  151.                                 //typedef genera un sinónimo para un tipo de dato, o sea, en vez de escribir al declarar una variable de tipo estrucura, solo escribes el sinónimo
  152.                                 //por ejemplo en vez de escribir struct Registro reg1  (variable llamada reg1 de tipo struct Registro), solo escribes registro reg1
  153. typedef struct Registro{    
  154.     char nombre[15];
  155.     char apellidos[25];
  156.     char direccion[40];
  157.     char cod_pos[8];
  158.     char tel[15];
  159.     char email[30];
  160.     char facebook[30];  
  161. }registro; // sinónimo que queremos
  162.  
  163. int main()
  164. {
  165.     int exit=0, i;
  166.     registro reg[3]; // arreglo de 3 elementos de tipo struct Registro
  167.     do
  168.     {
  169.  
  170.        
  171.         for(i=0;i<3;i++)
  172.         {
  173.             printf("\n AGENDA, REGISTRO #%d\n", i+1);
  174.             printf("Ingrese el nombre: ");
  175.             setbuf(stdin, NULL);  // esto es para "limpiar" el buffer de entrada, para que no entre basura en la cadena que se escriba
  176.             gets(reg[i].nombre);
  177.             printf("Ingrese los apellidos: ");
  178.             setbuf(stdin, NULL);
  179.             gets(reg[i].apellidos);
  180.             printf("Ingrese el direccion: ");
  181.             setbuf(stdin, NULL);
  182.             gets(reg[i].direccion);
  183.             printf("Ingrese el codigo postal: ");
  184.             setbuf(stdin, NULL);
  185.             gets(reg[i].cod_pos);
  186.             printf("Ingrese el telefono: ");
  187.             setbuf(stdin, NULL);
  188.             gets(reg[i].tel);
  189.             printf("Ingrese el email: ");
  190.             setbuf(stdin, NULL);
  191.             gets(reg[i].email);
  192.             printf("Ingrese el facebook: ");
  193.             setbuf(stdin, NULL);
  194.             gets(reg[i].facebook);
  195.         }
  196.  
  197.         for(i=0;i<3;i++)
  198.         {
  199.             printf("\n");
  200.             printf("\n AGENDA, REGISTRO #%d\n", i+1);
  201.             printf("Nombre: %s \n", reg[i].nombre);
  202.             printf("Apellidos: %s\n", reg[i].apellidos);
  203.             printf("Direccion: %s\n", reg[i].direccion);
  204.             printf("Codigo Postal: %s\n", reg[i].cod_pos);
  205.             printf("Telefono: %s\n", reg[i].tel);
  206.             printf("Email: %s\n", reg[i].email);
  207.             printf("Facebook: %s\n", reg[i].facebook);
  208.             printf("\n");
  209.         }
  210.  
  211.         exit=1;
  212.     }while(exit!=1);
  213.     return 0;
  214. }
  215.  
  216. //////////////////////////////// FUNCIONAMIENTO PUNTEROS /////////////////////////////////
  217. #include "stdafx.h"
  218. void imprimir(int *v, int *p, int c[]);
  219.  
  220.  
  221. int main()
  222. {
  223.  
  224.     int var, *puntero, C[]={10, 11, 12, 13, 14, 15};
  225.     printf("\tvariable\tdireccion\tvalor\t\tindireccion\n");
  226.     var=5;
  227.     puntero=&var;
  228.     imprimir(&var, puntero, C);
  229.  
  230.     printf("\n\n");
  231.     printf("Haciendo 'puntero=C' y luego '*puntero=20'\n");
  232.     puntero=C;
  233.     imprimir(&var, puntero, C);
  234.  
  235.  
  236.     printf("\n\n");
  237.     *puntero=20;
  238.     imprimir(&var, puntero, C);
  239.     return 0;
  240. }
  241.  
  242. void imprimir(int *v, int *p, int c[])
  243. {
  244.     int i;
  245.     printf("\tvar\t\t%x\t\t%d\t\tN//A\n", v, *v);
  246.     printf("\tpuntero\t\t%x\t\t%x\t\t%d\n", &p, p, *p);
  247.     for(i=0;i<5;i++)
  248.     {
  249.         printf("\tC[%d]\t\t%x\t\t%d\t\tN//A\n", i, &c[i], c[i]);
  250.     }
  251. }
  252.  
  253. ////////////////////////////////////////////////////////////////////////////////////////
  254. ///////////////////////////// SIMULACION EXAMEN 14-P ////////////////////////////////////
  255. // (i)Generar dos cadenas de literales y almacenarlas en arreglos A y B, respectivamente;
  256. //(ii)Concatenar A con B y el resultado escribir al arreglo C.
  257. //(iii) Mapear cada letra de C a un número correspondiente ('a' 0, 'b' 1, etc.) y a través de ello mapear todo contenido de C al //contenido de un arreglo numérico D;
  258. //(iv) y, finalmente, graficar D en la ventana de consola
  259. //
  260.  
  261. #include "stdafx.h"
  262. #include <stdlib.h>
  263.  
  264. #define TAM_A 5
  265. #define TAM_B 5
  266. #define TAM_C TAM_A+TAM_B
  267.  
  268. void gen_cad(char a[], char b[]);
  269. void imprimir(char t[], int tam);
  270. void concatenar(char a[], char b[], char c[]);
  271. int letra_a_entero(char l);
  272. void gen_D(char c[], int d[]);
  273.  
  274. int main()
  275. {
  276.     char A[TAM_A], B[TAM_B], C[TAM_C];
  277.     int D[TAM_C], i;
  278.  
  279.     gen_cad(A,B);
  280.     imprimir(A,TAM_A);
  281.     imprimir(B, TAM_B);
  282.     concatenar(A,B,C);
  283.     imprimir(C, TAM_C);
  284.     gen_D(C,D);
  285.  
  286.     for(i=0;i<TAM_C;i++)
  287.         printf("%d", D[i]);
  288.     printf("\n");
  289.  
  290.     return 0;
  291. }
  292.  
  293. void gen_cad(char a[], char b[])
  294. {
  295.     int i=0;
  296.     for(i=0;i<TAM_A;i++)
  297.         a[i]=97+rand()%(122-97);
  298.     for(i=0;i<TAM_B;i++)
  299.         b[i]=97+rand()%(122 - 97);
  300.    
  301. }
  302.  
  303. void imprimir(char t[], int tam)
  304. {
  305.     int i;
  306.     for(i=0;i<tam;i++)
  307.         putc(t[i], stdout);
  308.     printf("\n");
  309. }
  310.  
  311. void concatenar(char a[], char b[], char c[])
  312. {
  313.     int i=0;
  314.  
  315.         for(i=0;i<TAM_A; i++)
  316.             c[i]=a[i];
  317.  
  318.         for(i=0;i<TAM_B; i++)
  319.             c[i+TAM_B]=b[i];
  320.  
  321.        
  322. }
  323.  
  324. int letra_a_entero(char l)
  325. {
  326.     int i;
  327.     i=l-97;
  328.     return i;
  329. }
  330.  
  331. void gen_D(char c[], int d[])
  332. {
  333.     int i;
  334.     for(i=0;i<TAM_C;i++)
  335.         d[i]=i;//letra_a_entero(c[i]);
  336.    
  337. }
  338. //////////////////////////////////////////////////////////////////////////////////////////
  339. /////////////////////////  TAREA 4 - Movimiento de un texto //////////////////////////////
  340. //
  341. //
  342.  
  343. #include "stdafx.h"
  344. #include <conio.h>
  345. #include <stdlib.h>
  346. #define TAM_LINEA 46
  347. #define TAM_PALABRA 11
  348.  
  349. int gen_linea(char l[], char p[]);
  350. int mov_der(char l[], int pos, char pal[]);
  351. int mov_izq(char l[], int pos, char pal[]);
  352.  
  353.  
  354.  
  355. int main()
  356. {
  357.     char tecla, linea[TAM_LINEA], palabra[TAM_PALABRA];
  358.     int pos;
  359.     printf("Movimiento de una palabra\n\n");
  360.     pos = gen_linea(linea, palabra);
  361.     puts(linea);
  362.     printf("'a': mover izquierda, 's': mover derecha, 'x': salir\n");
  363.  
  364.     //@TODO: remove this line
  365.     printf("%s en pos %d\n", palabra, pos);
  366.  
  367.     do
  368.     {
  369.         tecla = getch();
  370.  
  371.         switch (tecla)
  372.         {
  373.         case 'a':
  374.             {
  375.                 pos = mov_izq(linea, pos, palabra);
  376.                 puts(linea);
  377.                 break;
  378.             }
  379.         case 'd':
  380.             {
  381.                 pos = mov_der(linea, pos, palabra);
  382.                 puts(linea);
  383.                 break;
  384.             }
  385.         default:
  386.             break;
  387.         }
  388.  
  389.        
  390.  
  391.     } while (tecla != 'x');
  392.  
  393.     return 0;
  394. }
  395.  
  396. int gen_linea(char l[], char pal[])
  397. {
  398.     int i, pos = rand() % (TAM_LINEA - 2);
  399.     char *pp;
  400.  
  401.     for (i = 0; i < TAM_LINEA - 1; i++)
  402.         l[i] ='-';  
  403.     l[i] = '\0';
  404.  
  405.     for (i = 0; i < TAM_PALABRA - 1; i++)
  406.         pal[i] = 'a' + rand() % ('a' - 'z' + 1);
  407.     pal[i] = '\0';
  408.  
  409.     pp = pal;
  410.  
  411.     for (i = 0; i < TAM_PALABRA - 1; i++)
  412.     {
  413.         if (pos + i > TAM_LINEA - 2)
  414.             pos = 0 - i;
  415.         l[pos + i] = *pp;
  416.         pp++;
  417.     }
  418.     if (pos < 0)
  419.         pos = TAM_LINEA - 1 + pos;
  420.  
  421.     return pos;
  422. }
  423.  
  424. int mov_der(char l[], int pos, char pal[])
  425. {
  426.     int i, n_pos = pos + 1;
  427.     char *pp;
  428.  
  429.     pp = pal;
  430.     l[pos] = '-';
  431.  
  432.     for (i = 0; i < TAM_PALABRA - 1; i++)
  433.     {
  434.         if (n_pos + i > TAM_LINEA - 2)
  435.             n_pos = 0 - i;
  436.  
  437.         l[n_pos + i] = *pp;
  438.        
  439.         pp++;
  440.     }
  441.     if (n_pos < 0)
  442.         n_pos = TAM_LINEA - 1 + n_pos;
  443.  
  444.     return n_pos;
  445. }
  446.  
  447. int mov_izq(char l[], int pos, char pal[])
  448. {
  449.     int i, n_pos = pos - 1;
  450.     char *pp;
  451.  
  452.     pp = pal;
  453.  
  454.     l[pos + TAM_LINEA - 1] = '*';
  455.     for (i = 0; i < TAM_PALABRA - 1; i++)
  456.     {
  457.         if (n_pos + i < 0)
  458.             n_pos = TAM_LINEA - 2 - i;
  459.         if (n_pos + i > TAM_LINEA - 2)
  460.             n_pos = 0 - i;
  461.  
  462.         l[n_pos + i] = *pp;
  463.         pp++;
  464.     }
  465.     if (n_pos < 0)
  466.         n_pos = TAM_LINEA - 1 + n_pos;
  467.  
  468.     return n_pos;
  469. }
  470.  
  471.  
  472.  
  473.  
  474. ////////////////////////////////////////////////////////////////////////////////////////////
  475. //////////////////  contador de caracteres en una cadena  ////////////////////////////////
  476.  
  477. #include "stdafx.h"
  478. #define TAM 101
  479.  
  480.  
  481. int conteo(const char texto[])  // recibe como parametro un arreglo de caracteres, const es para no modificar la cadena original
  482. {
  483.     int num=0;
  484.     while(texto[num]!='\0')    // cuenta los espacios del arreglo hasta que encuentra el simbolo de fin de cadena '\0'
  485.             num++;
  486.     return num;                 //Regresa el numero de espacios contados
  487. }
  488.  
  489.  
  490.  
  491. int main()
  492. {
  493.     char palabra[TAM];      // Inicializacion del arreglo donde se guardara el texto
  494.  
  495.  
  496.     printf("Introduce un texto: \n ");
  497.     gets(palabra);          // funcion para obtener una cadena de caracteres (palabra) // funciona mejor que scanf porque es especial
  498.     printf("\nEl numero de letas ingresadas fueron: %d\n", conteo(palabra));
  499.                             // ya que la funcion regresa un entero, se puede imprimir directamente
  500.     return 0;
  501. }
  502.  
  503. ////////////////////////////////////////////////////////////////////////////////////////
Add Comment
Please, Sign In to add comment