programa repeticion y cuenta con vectores

Iniciado por MikeBaeza, 12 Mayo 2016, 01:05 AM

0 Miembros y 1 Visitante están viendo este tema.

MikeBaeza

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) =


class_OpenGL

No se entregan códigos resueltos. Si quieres, puedes presentar tus dudas PUNTUALES. Elabora un código e intentaremos ayudarte en todo lo posible ;)

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

MikeBaeza

#2
Del programa 1 tengo esto
#include <stdio.h>
#include <string.h>
void CountA(char frase[], char diccionario[],int i);
int main ()
{
   char diccionario[26] = "abcdefghijklmnopqrstuvwxyz", frase[30];
   int i, caracteres;
   printf("introduce frase\n");
   fgets(frase, 30, stdin);
   
   caracteres = strlen(frase);
   
   for  (i = 0; i < 25; i++)
       CountA(frase, diccionario, i);
   return 0;
}

void CountA(char frase[], char diccionario[], int i)
{
   int j, num,contador;
   char letra;
   contador = 0;
   num = strlen(frase);
   
   for (j = 0; j < num-1; j++)
   {
       if (frase[j] == diccionario[i])
       {
               contador+=1;
               letra = diccionario[i];
       }
       
           
   }
   if (contador != 0)
       printf("el numero de letras %c es %d\n", letra, contador);
}




del programa 2 tengo esto

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
double x;
double y;
} Vec;

typedef struct {
double aa;
double ab;
double ba;
double bb;
} Mat;
int main(int argc, char *argv[]) {

}





Bueno, del dos es lo que llevo, junto con el tres, solo que no se que mas hacer
typedef struct
{
double x;
double y;
} Vec;

typedef struct
{
double aa;
double ab;
double ba;
double bb;
} Mat;


void PrintV(Vec X);

Vec TransV (Mat m, Vec x);

int main(int argc, char *argv[]) {

Vec x1={1,1};
Mat m1={0,1,1,2};
Mat m2;

PrintV (x1);

return 0;
}


void PrintV(Vec x)
{
printf ("(%g, %g)", x.x, x.y);
}


Vec TransV (Mat m, Vec x)
{

}

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

class_OpenGL

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:
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':
int CountA(/*Parámetros*/)

3º El ciclo for no itera por todos los elementos de la frase.
for (j = 0; j < num-1; j++)
debería ser...
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 (cpp) [Seleccionar]
for ... {
   ...
   letra = diccionario[i];
}

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:
typedef struct{
double elems[2];
} Vec;

typedef struct {
double elems[2][2];
} 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)

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL