Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MikeBaeza en 12 Mayo 2016, 01:05 am



Título: programa repeticion y cuenta con vectores
Publicado por: MikeBaeza en 12 Mayo 2016, 01:05 am
Con los primeros dos seria mucha ayuda, por favor T_T
Programa 1
Crear una funcion llamada CountA, que cuente cuantas veces aparece la letra "a" en una cadena, la funcion debe devolver un entero (debe contar por igual "a" y "A".
Aplicarla a la frase: "Alla en la alameda venden arracadas". (ignorar acentos).

Programa 2
Crear dos estructuras de datos: "Vec" y Mat" que representen, respectivamente:
a) Un vector de dos numeros double
b) Una matriz de 2x2 numeros double

Programa 3
Para las estructuras del problema anterior
a) Crear una funcion que imprima vectores, su prototipo es "void PrintV (Vec X)"
b) Crear una funcion que reciba argumentos, que multiplique una matriz por un vector, su prototipo es "Vec TransV (Mat M, Vec X)"
c) Usar las funciones para calcular e imprimir el resultado de la siguiente operacion
(0 1) (1) = ?
(1 2) (1) =



Título: Re: URGENTE, AYUDA CON ESTE PROGRAMA
Publicado por: class_OpenGL en 12 Mayo 2016, 01:19 am
No se entregan códigos resueltos. Si quieres, puedes presentar tus dudas PUNTUALES. Elabora un código e intentaremos ayudarte en todo lo posible ;)


Título: Re: URGENTE, AYUDA CON ESTE PROGRAMA
Publicado por: MikeBaeza en 12 Mayo 2016, 01:21 am
Del programa 1 tengo esto
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. void CountA(char frase[], char diccionario[],int i);
  4. int main ()
  5. {
  6.    char diccionario[26] = "abcdefghijklmnopqrstuvwxyz", frase[30];
  7.    int i, caracteres;
  8.    printf("introduce frase\n");
  9.    fgets(frase, 30, stdin);
  10.  
  11.    caracteres = strlen(frase);
  12.  
  13.    for  (i = 0; i < 25; i++)
  14.        CountA(frase, diccionario, i);
  15.    return 0;
  16. }
  17.  
  18. void CountA(char frase[], char diccionario[], int i)
  19. {
  20.    int j, num,contador;
  21.    char letra;
  22.    contador = 0;
  23.    num = strlen(frase);
  24.  
  25.    for (j = 0; j < num-1; j++)
  26.    {
  27.        if (frase[j] == diccionario[i])
  28.        {
  29.                contador+=1;
  30.                letra = diccionario[i];
  31.        }
  32.  
  33.  
  34.    }
  35.    if (contador != 0)
  36.        printf("el numero de letras %c es %d\n", letra, contador);
  37. }
  38.  
  39.  
  40.  
  41.  
  42. del programa 2 tengo esto
  43.  
  44. #include <stdio.h>
  45. #include <stdlib.h>
  46. #include <string.h>
  47.  
  48. typedef struct{
  49. double x;
  50. double y;
  51. } Vec;
  52.  
  53. typedef struct {
  54. double aa;
  55. double ab;
  56. double ba;
  57. double bb;
  58. } Mat;
  59. int main(int argc, char *argv[]) {
  60.  
  61. }



Bueno, del dos es lo que llevo, junto con el tres, solo que no se que mas hacer
Código
  1. typedef struct
  2. {
  3. double x;
  4. double y;
  5. } Vec;
  6.  
  7. typedef struct
  8. {
  9. double aa;
  10. double ab;
  11. double ba;
  12. double bb;
  13. } Mat;
  14.  
  15.  
  16. void PrintV(Vec X);
  17.  
  18. Vec TransV (Mat m, Vec x);
  19.  
  20. int main(int argc, char *argv[]) {
  21.  
  22. Vec x1={1,1};
  23. Mat m1={0,1,1,2};
  24. Mat m2;
  25.  
  26. PrintV (x1);
  27.  
  28. return 0;
  29. }
  30.  
  31.  
  32. void PrintV(Vec x)
  33. {
  34. printf ("(%g, %g)", x.x, x.y);
  35. }
  36.  
  37.  
  38. Vec TransV (Mat m, Vec x)
  39. {
  40.  
  41. }


Título: Re: programa repeticion y cuenta con vectores
Publicado por: engel lex en 12 Mayo 2016, 01:26 am
Mod: No rompas reglas del foro, no debes escribir en mayúsculas, los titulos de los temas deben ser descriptivos, no hagas doble post y los códigos deben ir en etiquetas GeSHi


Título: Re: programa repeticion y cuenta con vectores
Publicado por: class_OpenGL en 12 Mayo 2016, 02:07 am
Respecto al primer código, sinceramente, veo cosas muy raras.

Voy a analizarlo.

1º. Parámetros. ¿Por que pasarle a la función CountA un "diccionario" si solo estás buscando la letra 'a' o la 'A'?

Creo que es lógico que la función solo pida la cadena (frase) en cuestión:
Código
  1. void CountA(char frase[])

2º El valor de retorno. Según el ejercicio, la función debe retornar un entero, en concreto, la cantidad de 'a' o 'A':
Código
  1. int CountA(/*Parámetros*/)

3º El ciclo for no itera por todos los elementos de la frase.
Código
  1. for (j = 0; j < num-1; j++)
debería ser...
Código
  1. for (j = 0; j < num; j++)

4º Sin tener en cuenta las anotaciones de antes, veamos el código de la función en sí
¿Por qué guardas la letra que deseas comprobar en cada iteración del bucle for?
Código
  1. for ... {
  2.    ...
  3.    letra = diccionario[i];
  4. }
La variable 'i' no cambia en toda la función, así que la letra tampoco.

Respecto al segundo código, si bien puedes representar un vector y una matriz con esas estructuras, es mejor que dentro de estas guardes arreglos:
Código
  1. typedef struct{
  2. double elems[2];
  3. } Vec;
  4.  
  5. typedef struct {
  6. double elems[2][2];
  7. } Mat;

Eso ya es opinión mía.

Respecto al último ejercicio, has de recordar cómo se multiplican las matrices.
En el caso de una matriz 2x2 por una matriz columna de 2x1 se hace así:

Ejemplo:

(ma mb) (va)
(mc md) (vb)   =

(ma*va + mb*vb)
(mc*va + md*vb)