[Curso] Introducción a la programación en C (X)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

arisma
Habitual
Habitual
Mensajes: 497
Registrado: 18 Sep 2009, 08:41

Re: [Curso] Introducción a la programación en C (X)

Mensaje por arisma »

Puzky escribió:Profe no entendí muy bien lo que son los structs :?


Es una forma de declarar una plantilla. Después crearás digamos variables de ese tipo estructura que has creado que tienen esa forma(estructura) común, como ocurre con los personajes.

De esa forma no tienes que estar creando, una variable para nombre, apellidos y etc, por cada uno de los personajes.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (X)

Mensaje por m0skit0 »

Puzky, ¿recuerdas el símil de las variables con los cajones? Pues imagina que un struct es un armario con varios cajones, cada uno de los cuales tiene un nombre. Por tanto un struct es en realidad una variable con varias variables dentro de sí misma, cada una con su nombre.
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (X)

Mensaje por dRoLl3R »

una duda: para que se usa unsigned en el 2º ejemplo??

Código: Seleccionar todo

struct tPersonaje
{
   char nombre[80];
   unsigned int level;
   int hp;
   unsigned int mp;
   unsigned int xp;
};
El nombre del struct tiene que tener esa t delante o no hace falta??
un saludo a todos
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
finfantasy
Habitual
Habitual
Mensajes: 153
Registrado: 15 Oct 2009, 19:00

Re: [Curso] Introducción a la programación en C (X)

Mensaje por finfantasy »

Un unsigned int es un entero sin signo, su rango es, en 32 bits: [0, 2^32], mientras que un int es: [-2^16, 2^16 - 1]
Y supongo, por el nombre de las variables, que como son valores que nunca son negativos, pues mejor usar unsigned.

En cuanto a lo del nombre, tu le puedes poner el nombre que quieras, no tiene que tener esa t delante.

Xanatos
Habitual
Habitual
Mensajes: 226
Registrado: 11 Nov 2009, 09:59

Re: [Curso] Introducción a la programación en C (X)

Mensaje por Xanatos »

finfantasy escribió:En cuanto a lo del nombre, tu le puedes poner el nombre que quieras, no tiene que tener esa t delante.


yo por ejemplo (y otros claro!) cuando tengo una estructura en C le pongo el nombre y una s (las S por Struct)
ejemplo:

struct personaje_s
{
char nombre[80];
unsigned int level;
int hp;
unsigned int mp;
unsigned int xp;
};

así se que es una estructura!

y si alguien lo lee, sabra mas o menos que todas las variables con _s son estructuras!

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (X)

Mensaje por dRoLl3R »

Gracias :adora: :adora:
Entonces eso significa que hp puede ser negativo porque no tiene unsigned y los demás int solo positivos ¿No?
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (X)

Mensaje por m0skit0 »

finfantasy escribió:su rango es, en 32 bits: [0, 2^32]

Rectifico un mínimo error: [0, 2^32-1] (son 2^32 números, pero el 0 también cuenta ;))

Droller escribió:Entonces eso significa que hp puede ser negativo porque no tiene unsigned y los demás int solo positivos ¿No?

Eso es. Cuando es unsigned, es sólo positivo.
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (X)

Mensaje por dRoLl3R »

Bueno ahí va el primer ejercicio:
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
   int i = 1, j = 0, k = 0;

   int pares[10];   
   int impares[10];

   while (i <= 19)
   {
       pares[j++] = i+1;
       impares[k++] = i;
       i = i + 2;
   }

   for (i=0; i<10; i++)
      printf("%d ", pares[i]);

   printf("\n");

   for (i=0; i<10; i++)
      printf("%d ", impares[i]);

   printf("\n");

   return 0;
}
Haber profe que opina. Fijo que se puede optimizar más xD
El segundo si puedo lo subo mañana. Que hoy me toca estudiar historia.... :cry:
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (X)

Mensaje por m0skit0 »

Opino que es "a ver", y no "haber" :tongue:

Está muy bien :oki:
Imagen

Avatar de Usuario
dRoLl3R
Habitual
Habitual
Mensajes: 315
Registrado: 29 Sep 2009, 21:30
Ubicación: [ † ] Asturias

Re: [Curso] Introducción a la programación en C (X)

Mensaje por dRoLl3R »

Lo siento :oops: :oops:
Soy muy malo con la ortografía como ya lo habrás visto xD

Bueno ya hice la segunda tarea que me aburría estudiando historia ... xD
Spoiler:

Código: Seleccionar todo

#include <stdio.h>

int main(int argc, char* argv[])
{
    int max = 0, min = 50, i = 0, modamax = 0, modamin = 0, a = 0, b = 0;
    int num[50];
    float media = 0;
   
    srand(time(NULL));
   
    while (i<50)
          num[i++] = (rand() % 50) + 1;
   
    for (i=0;i<50;i++)
    {
        media = media + num[i];
        if (num[i] > max)
           max = num[i];
        if (num[i] < min)
           min = num[i];
    }
   
    media = media / 50;
   
    for (i=0;i<50;i++)
    {
        if (num[i] == max)
           modamax++;
        if (num[i] == min)
           modamin++;
    }
   
    int maxv[modamax];
    int minv[modamin];
   
    for (i=0;i<50;i++)
    {
        if (num[i] == max)
           maxv[a++] = i + 1;
        if (num[i] == min)
           minv[b++] = i + 1;
    }
   
    printf("Los 50 numeros son:\n");
    for (i=0;i<50;i++)
    {
        if ((i == 10)||(i == 20)||(i == 30)||(i == 40))
           printf("\n");
           
        printf("%d ", num[i]);
    }
   
    printf("\n\nLa media de los 50 numeros es %.2f.", media);
   
    if (modamax != 1)
    {
       printf("\n\nEl numero mayor es el %d y se repite %d veces en las posiciones ", max, modamax);
       for (i=0;i<modamax;i++)
       {
           if (i < (modamax - 1))
              printf("%d ", maxv[i]);
           else
               printf("y %d.", maxv[i]);
       }
    }   
    else
        printf("\n\nEl numero mayor es el %d y se repite 1 vez en la posicion %d.", max, maxv[0]);
   
    if (modamin != 1)
    {
       printf("\n\nEl numero menor es el %d y se repite %d veces en las posiciones ", min, modamin);
       for (i=0;i<modamin;i++)
       {
           if (i < (modamin - 1))
              printf("%d ", minv[i]);
           else
              printf("y %d.", minv[i]);
       }
    }
    else
        printf("\n\nEl numero menor es el %d y se repite 1 vez en la posicion %d.", min, minv[0]);
   
    return 0;
}
A ver profe que opinas de este :?:
Espero que esté bien xD
Un saludo a todos.

EDITO: lo tengo mal hecho que pensaba que la moda era las veces que se repite un número, por lo que hice las veces que se repite el mayor y las veces que se repite el menor. Hoy de tarde me pondré a mirar como hacer la moda correcta ;)
Un saludo
PSP3ooo: 4.21 -> 5.00 -> 5.03 -> 5.03 GEN-A -> 5.03 M33 -> 5.03 MHU -> 5.03 GEN-C -> 5.03 MHU -> 6.20 PRO-B4

Responder