Curso completo de programación con lenguaje C

B

#570

Efectivamente, ese tipo de problemas hay que platearlos a nivel teórico y lo suyo sería utilizando árboles o grafos y una vez lo tienes planteado, conociendo el TAD de turno, debería ser sencillo resolver y seguramente la recursividad te ayude. Pero no es algo trivial, es droga dura que se da en algorimia y estructuras de datos avanzadas, me parece curioso ahora que comentas el de las torres de hanoi, me lo apunto para las vacaciones xD.

oZk4h

voy a empezar a hacer algo por mi cuenta con c/c++ con el macbook air (actualmente tengo OS X 10.11.1 El capitan) y quiero partir de este tutorial. Esta por ver de donde parto todavía xD

recomendáis Xcode (os x) para alguien oxidado? anteriormente usé Borland C++, dev c++, Visual studio 2010

Me costara acostumbrarme? Puedo hacer cosas multiplataforma aunque esté bajo OS x? por ejemplo un programa simple con GUI que funcione en windows. Me gustaría no verme forzado a instalar bootcamp para hacer programas tipo GUI NET Framework y cosas asi para Win

1 respuesta
B

#572 para el tutorial, con gcc por la terminal te bastara :)

si quieres un IDE decente que te corrija errores y tal, yo me iba a visual studio. creo que la code 2015 tiene soporte para osx, no se si tiene syntax para c. sino pues un visual studio normal por parallels y ya.

1 respuesta
herre

#573 Visual Studio tiene soporte para C++ pero no para C, creo.

1 respuesta
B

#574 C++ es C con objetos, yo mismo he programado C en vs2012 xD

2 respuestas
B

C++ a pesar de tener su estandar muy definido originalmente es una extension de C. Si quieres utilizar POO tendrás que usar los recursos que C++ te ofrece, pero aun con POO puedes utilizar muchas cosas de funcional y librerías de C. Todos los que tienen soporte para C++ tienen para C.

cabron

#575

Eso no es del todo así, C++ no es un superconjunto estricto de C, así que salvo que el compilador esté explícitamente preparado para compilar C, un compilador de C++ daría error intentando compilar código C.

Otra cosa es que todos los compiladores de C++ (al menos todos los más usados) también sean compiladores de C, y de forma transparente cambian de un modo a otro según si la extensión del archivo es .c o .cpp.

KooPad

Una duda un poco tonta, los juegos programados en C++ tipo the binding of isaac que librerías usan? Alguna fuente?

2 respuestas
gonya707

#578 si mal no recuerdo BoI usaba SDL, es muy conocida para hacer videojuegos

1 2 respuestas
cabron

#578 #579

Binding of Isaac está hecho en flash...

1 respuesta
KooPad

#580 El rebirth creo que está hecho en c++

1 respuesta
cabron

#581

Ese ni idea, solo conozco el primero que hizo, de todas formas como te ha dicho #579 sdl es bastante conocido y usado.

1 respuesta
KooPad

#582 Muchas gracias, habrá que echarle un ojo

1 respuesta
Gif

#583 mirate SFML mas OOP y eso.

BLZKZ

#575 vs2012 no soporta c 98, por ejemplo

willy_chaos
Edit

Vale ya he conseguido entender como funciona esto (mas o menos) ahora me gustaria saber si conoceis como hacer en C para que se emule una ventana de chat, por ejemplo hay un programa de linux llamado ekg2 que permite conectarse a Facebook desde la consola., pero hay una cosa que me ha gustado bastante y es que realmente parece que tenga interfaz grafica (hablando siempre en modo consola) ya que cuando escribes el mensaje en la shell, el resultado aparece mas arriba.

Un ejemplo mejor que mil palabras

Edit: Bueno ya esta terminado. Si a alguien le interesa, que me lo diga y le paso el enlace de mi repositorio donde estará en breve subida.

B

Hola!

Tengo una dudilla que me ha surgido:

Si quiero utilizar un parámetro de una estructura en una función, ¿puedo utilizarlo sin utilizar un puntero a esta estructura, que le paso por parámetro de función a la función?

Ejemplo1

Lo del main es correcto, puedo modificar valor de la estructura utilizando el (.), en la función también? O tengo que crear un puntero a la estructura, pasarlo por parámetro de función y luego modificarlo con la ->?

Ejemplo2

Gracias!

1 respuesta
gonya707

#587 En la funcion no podrias asi de primeras porque la variable miestruct es local, y puesto que la has creado en la funcion main, solo puedes acceder a ella desde main.

Tienes dos opciones, hacer funcion(*str) como dices, o crear miestruct de manera global creandola fuera del main. Personalmente me quedo con la primera.

por cierto, estas metiendo un numero entero en una variable que en principio es un caracter :p aunque eso se puede hacer.

1 respuesta
B

#588 Al fin he podido editar y que quede el código bien haha, sería como en el ejemplo 2 verdad?

1 respuesta
gonya707

#589 mas o menos, te pasa lo mismo, creas 'p' en el main, y la funcion "funcion" no sabe lo que es p, no puede verlo, ademas de que no llamas a la funcion en ningun momento

typedef struct {
    int var1;
    int var2;
    char var3[10];
} str;

main(){
    str miestruct;
    miestruct.var3[0] = 1;
    funcion(&miestruct);
}

void funcion(*p){
    p->var1 = 10;
}
1 respuesta
B

#590 Entendido, he intentado hacer un ejemplo fácil de concepto de punteros y ha salido un buen churro, entendido!! Gracias!

B

Vale, otra duda:

Si lo ponemos así:

typedef struct {
int var1;
int var2;
char var3[10];
} str;

main()
{
str *p;
str miestruct;
p = &miestruct;
Función (p)
};

void Funcion(*z)
{
z->var1=10;
}

La llamada a función y los parámetros estarían bien? Es decir, en p tengo la dirección de miestruct y lo paso como parámetro de función.

1 respuesta
gonya707

#592 si

deja de poner tildes en código xD

1 respuesta
B

#593 Haha vale, muchas gracias!

10 días después
iSecOne

Hola buenas, tenia un problema en C que igual me podiais solucionar. La cuestión es que hay que introducir 4 números y esos pasarlos a una función. Ya dentro de la función (char *IP(d1,d2,d3,d4)) pongo que ip[1] sea igual a d1, ip[2]='.' , ip[3] igual a d2... Hasta ahí bien. El problema es cuando vuelvo a la función y lo printeo (printf("%s", IP(d1,d2,d3,d4) ) los números me los printea como ASCII, no como números en sí. ¿Alguna solución que me pueda servir?

Gracias de antemano, espero que entendáis la pregunta :)

1 respuesta
gonya707

#595 es que le estas pasando las variables por valor y no por referencia, al terminar la funcion donde les asignas el valor, esas variables desaparecen, te esta imprimiendo basura.

o bien le pasas el array entero de una vez o le pasas las cuatro variables como puntero.

Por no darte directamente la solucion buena mejor lee el post #154 e intenta de nuevo

1 respuesta
iSecOne

#596 La cuestión es que el programa tiene que incluír la función sí o sí, tal y como está. Voy a echar un ojo a #154 , pero te paso también mi código, porque igual fui yo que no me expliqué bien :)

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

char *IP(int d1, int d2, int d3, int d4);

int main() {
    int d1,d2,d3,d4;
    char *b;
    
printf("Introduce el primer dígito: \n"); scanf("%d",&d1); printf("Introduce el segundo dígito: \n"); scanf("%d",&d2); printf("Introduce el tercer dígito: \n"); scanf("%d",&d3); printf("Introduce el cuarto dígito: \n"); scanf("%d",&d4); printf("\nClave IP: %s",IP(d1,d2,d3,d4)); return (0); } char *IP(int d1, int d2, int d3, int d4){ int i; char *ip;
ip=(char *)malloc(8*sizeof(char)); ip[0]= d1; ip[1]='.'; ip[2]= d2; ip[3]='.'; ip[4]= d3; ip[5]='.'; ip[6]= d4; ip[7]='\0'; return ip; }

edit: El enunciado: Escribir una función char *IP(int d1, int d2, int d3, int d4) que reciba cuatro enteros que definen
dominios y subdominios y que los transforme en una direccion IP en el formato habitual y lo devuelva como
puntero a char.

Fyn4r

Pero el problema es al imprimir, la funcion seguramente tire bien, pero no puedes imprimir con %s porque interpreta como una cadena

iSecOne

Solucionado :D Pasé cada dígito de la IP por separado, y al mandarlo solo tuve que sumarle 48 para que no me saliese el ASCII, gracias de todas formas :)

9 días después
B

Buenas! Estoy analizando un código que hace una conversión hexadecimal de una posición.

No me queda nada claro, alguno que haya utilizado un método parecido para convertir a hexa?

long convert_hexa_pos(uchar size,uchar datos[10])
{
	uchar i,j=0;
	long sumatorio=0;
	long medio;
	for(i=(size-1); i > 0; i--)
        {
		medio=datos[i]*pow((double)2,(j*8));
		sumatorio=sumatorio + medio; 
		j++;
	}
	return sumatorio;
}
1 respuesta