Curso completo de programación con lenguaje C

gonya707

#510 piensa en las operaciones matemáticas que puedes hacer programando

"+ (suma), - (resta), * (multiplicación), / (división) y % (resto)"

si te doy un numero, por ejemplo 683, sabrias decirme cuales son las unidades usando solo esas operaciones? Y una vez sabidas las unidades las decenas?

Dale unas cuantas vueltas, este ejercicio mental es bueno :p

2 respuestas
joked9

#511 si ya.. pero si te digo que matematicas no es lo mío. Al estudiarlo forzado siempre las he visto como un puta bazofia y ahora me está despertando el interés... Gracias a ti básicamente. Voy a mirar :P

joked9

#511 si te digo la verdad no sabría, es el problema. Plantearlo se me da bien, pero no sabía que era con resto vamos.. Una vez se lo que hace eso ya si.

Era muy simple que tontico soy hahah

CaNaRy_r00lz

Llevo tiempo dandole vueltas a hacerme un programa de topografía, pero no se con que lenguaje hacerlo y encima se 0 de programacion, básicamente es un programa que te pida la entrada de números y luego te de el resultado, por ejemplo ecuacion de 2º grado que te pida, a b c, o el teorema de pitágoras le das 2 de los lados y te da como resultado el otro, es recomendable hacerlo con C? o debería mirar otro lenguaje?

1 respuesta
herre

#514 Es recomendable que no lo hagas tu.

Para ese caso en concreto, aprende python y mirate librerías de cálculo numérico de como numpy.

Empieza aquí: http://cacheme.org/curso-online-python-cientifico-ingenieros/

1 respuesta
CaNaRy_r00lz

#515 Que no lo haga yo? si lo que quiero es aprender a hacer ese tipo de cosas, se hacerlo en excel, y tengo una ligera idea en RPN muy ligera ya que es como está en mi calculadora HP50, pero lo que quiero es eso, un programita que lo pueda ejecutar en cualquier pc y no depender de la calculadora además asi aprendo a programar con una utilidad xD

Voy a pegarle un vistazo a la web, en python luego puedes tener un "exe"? si soy muy ignorante xD

1 respuesta
herre

#516 ese tipo de funcionalidades ya están implementadas mucho mejor de lo que tu lo vayas a poder hacer (simplemente por la cantidad de gente y horas y que se han invertido).

Si lo que quieres es aprender a programar implementando cositas simples como esa, entonces adelante, empieza por donde quieras.

Como pusiste que querías hacer un programa de topografía supuse que lo que quieres es utilizar ese tipo de herramientas para hacer algo más grande, entonces lo mejor es que empieces por python + numpy, etc...

1 respuesta
CaNaRy_r00lz

#517 Si exacto es decir, quiero tener en un sólo programa todo lo que uso, y saber que está bien, pk por internet puedes encontrar mil cosas pero no sabes como están hechas como aproximan ni que fórmulas usan, así que no es muy de fiar, y va de todo, calculo de coordenadas, cambio de coordenadas, clotoides etc etc , además así lo que hago es refrescar todo de paso xD a parte de ahorrar tiempo en según que cosas

Gracias por la info!

1 respuesta
gonya707

#518 vamos, si no tienes la presion de que lo necesitas ya, y quieres aprender el proceso para poder llegar a hacer cosas algo más complejas, cualquier lenguaje te vale, python como te han dicho es una buena alternativa a C para empezar

1 respuesta
CaNaRy_r00lz

#519 Siempre he querido aprender a programar, pero no soy capaz de aprender sin una meta, por eso al querer hacer esto me sirve para aprender a programar y tener mi propio programita xD y si además es sin presión

10 días después
Camp1

Alguien me puede echar un cable? Al ejecutar esta función en su programa el programa me deja de funcionar algunas veces, otras no, y las que deja de funcionar los datos que meto por pantalla y guardo en el fichero se quedan guardados.

void valorar_equipos(){

int i=0,j,aux;
T_equipos *sequipo;
FILE *fichero;

system("cls");

	if(( fichero = fopen( "Futbolistas.txt" , "r+" )) == NULL ){
	printf("ERROR: No existe el archivo 'Futbolista.txt'\n");
    }else{

sequipo = (T_equipos *)malloc(tam*sizeof(T_equipos));

do{
fscanf(fichero,"%d %d %s %s %d %d",&sequipo[i].codigo, &sequipo[i].equipo, sequipo[i].nombre, sequipo[i].apellido, &sequipo[i].precio, &sequipo[i].puntuacion);
do{
printf("Introduce la puntuacion de %s %s : ",sequipo[i].nombre, sequipo[i].apellido);
scanf("%d",&sequipo[i].puntuacion);
   }while( sequipo[i].puntuacion < 0 || sequipo[i].puntuacion > 10);
    i++;
    }while(!feof(fichero));

rewind(fichero);

aux=i-1;

for(j=0; j < aux; j++ )
    fprintf(fichero, "%0.2d %0.2d %s %s %d %d\n",sequipo[j].codigo, sequipo[j].equipo, sequipo[j].nombre, sequipo[j].apellido, sequipo[j].precio, sequipo[j].puntuacion);

    fprintf(fichero, "%0.2d %0.2d %s %s %d %d",sequipo[j].codigo, sequipo[j].equipo, sequipo[j].nombre, sequipo[j].apellido, sequipo[j].precio, sequipo[j].puntuacion);


    rewind(fichero);
    free(sequipo);
    fclose(fichero);

    printf("Puntuacion guardada\n");
    system("pause");
    menu_cronista();
}//else
}

#522 editado, que tenia un comentario y quite los comentarios para postearlo y se me quedo un trozo de el :psyduck:

2 respuestas
herre

#521 por lo pronto, en la línea 21 tienes algo raro de narices. Parece un error de copy paste.

Y por dios, formatear bien vuestro codigo o pasarlo por astyle antes si quereis que lo leamos xD He tenido que pegarlo en vim y adecentarlo un poco para entenderlo.

#521 Pon la declaracion de T_equipos

1
herre

#521 Como diablos estas compilando siquiera eso? estas usando el operador . para acceder a los miembros de un puntero a un struct. Deberías usar ->

1
herre

Otro buen recurso para aprender C (o cualquier lenguaje) haciendo algo guay (aprender criptografía): http://cryptopals.com/

1
29 días después
herre

Alguien liado con algo?

Ahora mismo estoy entreteniendome con un motor grafico 2.5D a lo doom (casi exactamente a lo doom, es un raycaster, y pretendo usar BSP y toda la pesca).

Tengo todo en pañales pero ya he podido hacer un mapa con el editor y moverme por él :success_kid:


http://zippy.gfycat.com/FavorableWebbedIzuthrush.webm

1
1 comentario moderado
M

Empiezo el cursillo, muy muy bien echo y por lo poco que he leído, bien explicado, mejor que en la facultad..! :S

Muchas gracias y publicaré dudas espero que no muy pronto! X-D

Saludos!

2
herre

Siento tener medio secuestrado el hilo pero estos apuntes de unos alumnos de la universidad de Illinois de programación de sistemas (en C claro) son la bomba:

https://github.com/angrave/SystemProgramming/wiki

1 respuesta
gonya707

#528 esta muy bien en efecto, pero es un curso de C para gente que ya sabe programar, porque te incluye conceptos muy abstractos y relativamente complejos desde el principio. El curso de este hilo está más orientado a gente que aprende a programar desde 0.

En cualquier caso, gracias por el aporte, siempre se puede aprender algo nuevo y nunca sobran recursos

1 respuesta
herre

#529 Bueno los dos primeros "capítulos" son una introducción a C, así que por lo menos te ponen un poco de vaselina :P

B

¿Qué consecuencias tiene esto a largo plazo? Así las tildes se leen en consola.

Por cierto, he llegado hasta la página 11 y no he sabido encontrar mención a los grados del triángulo del capítulo 2 (o 3, el del triángulo y los catetos con pows y doubles) y cómo representar la función en C :psyduck: Quiero decir, la hipotenusa y tal sí que me sale, pero ¿y lo de los grados de los otros dos lados? Todo triángulo rectángulo tiene 180º, si ya hay 90º del ángulo recto, como el enunciado no especifica que sea un triángulo rectángulo equilátero, los grados no se reparten 45 a 45. Igual está delante de mí y no lo veo xD ¿Tiene algo que ver con las líneas ortogonales y la simetría con respecto a la altura y la base, que curiosamente son los dos catetos? Mierda de geometría elemental.

1 respuesta
vincen

Actualmente solo se programar en PHP, siempre me ha picado la curiosidad de programar en C o JAVA para poder hacer alguna que otra aplicacion ligada a una pagina web, pero me da miedo, veo PHP muy facil y C muy dificil, como de dificil es? :/

Sabiendo PHP, me puede ayudar? Me puede entorpecer?
Me animo? :/

1 respuesta
gonya707

#531 sea un triángulo rectángulo equilátero

Si fuese un profesor de matematicas te daba una colleja xD Ademas, el enunciado dice claramente que es rectángulo. Lo que necesitas saber es esto: http://puu.sh/iNMLT/dcc77fa9ed.png , deja de hacerte pajas mentales xD

#532 Si sabes php te costará un poco menos, teniendo experiencia estructurando código y tal. Salvando detalles muy propios, los lenguajes de programacion basados en C (C++, java, PHP y cientos mas) no son tan distintos

bornex

Tengo un problemilla con un código en C.

Estoy intentando parsear un fichero el cual tiene una linea con valores separados por dos puntos, tal que así:

cadena1:15:cadena2:23

Lo que quiero es parsear la linea y meter en una estructura cada valor, por así decirlo, cargo la estructura con estos valores.

Tengo un archivo cabecera:

#ifndef CHARACTER_H_
#define CHARACTER_H_

typedef struct Character *Personaje;

struct Character{
        char name[20];
        int lvl;
};


extern void saveCharacter(char *name, int lvl);
extern Personaje *getCharacter();
extern char *toString(Personaje *pj);
#endif

y un archivo fuente:

Personaje *getCharacter(){
        FILE *fp;
        Personaje *salida;
        fp = fopen("kprct", "rb");

    fscanf(fp, "%[A-Za-z]:%d", (*salida)->name, &((*salida)->lvl));
    printf("Linea: %s : %d\n", (*salida)->name, (*salida)->lvl);

    fclose(fp);
    return salida;

}

El caso es que me da error de segmentación y no se el porque. ¿Cómo puedo rellenar la estructura y devolverla?

3 respuestas
Gif

#534 No estas inicializando la salida, tienes un nullptr.

Tienes que hacer

Personaje* salida = (Personaje*) malloc(sizeof(Personaje));
2 respuestas
bornex

#535 Me sigue dando error de segmentación

1 respuesta
Gif

#536

// esto esta definiendo que personaje es un puntero a una estructura tipo Character
typedef struct Character *Personaje;

//y después declaras un puntero de Personaje lo cual lo que haces es esto:
Character ** salida;
//por lo cual tienes que inicializar cada puntero del array que creas
Personaje* salida = (Personaje) malloc(sizeof(Personaje) * numPersonajes);
// reservamos la memoria para los personajes.
for(int i=0;i<numPersonajes;++i)
    salida[i] = (Character*) malloc(sizeof(Character));
// creo que esto lo tenias mal? faltaba un &
fscanf(fp, "%[A-Za-z]:%d", &(*salida)->name, &((*salida)->lvl));

Era tu intención hacer un array?

1 respuesta
bornex

#537 No, lo que quiero es solo hacer un personaje. Voy a probar

cabron

#534

¿por que pones extern en la declaración de las funciones? no es necesario, todas las funciones son extern por defecto.

herre

#534 Por el amor de una madre, no hagais esto:

typedef struct Character *Personaje;

No oculteis que un tipo es un puntero o volverá a morderos en el culo. Also, los nombres de los structs y las variables están en namespaces separados. Lo suyo es hacer:

typedef struct Character Character;

o mejor:

typedef struct Character {
...
} Character;

#535 En C no hace falta ese casteo que haces ahí, es cosa de C++. Y eso tampoco va a solucionar nada al chico porque estas mallocando el tamaño de un puntero, no del struct.

1 respuesta