Curso completo de programación con lenguaje C

Kike_Knoxvil

Hace unos 5 años que no programo nada, y ahora que me quería meter en ciertos asuntos este hilo me viene de perlas para realizar un repaso. Mis respetos y agradecimientos para el que lo hizo

Trolli

Hay algún entendido de C++ en la sala? No he visto ningún hilo de C++ y tengo un problemilla con una línea de código, a ver si alguien me puede echar un cable :no: :f5: es un programa muy sencillo OO

FoxWinterMan

Oye una pregunta del compilador este, donde esta la opcion de que te autocomplete las estructuras y demas?

scanf("%i",&atletas[i].prueba[b].clasificacion);

Para que al poner el punto te salgan todas las opciones que tienes definidas en la estructura?

1 respuesta
gonya707

#363 creo recordar que cuando instalas el programa una de las cosas que te pregunta es si deseas instalar el complemento que hace posible el autocompletado

Una vez instalado, no se decirte

FoxWinterMan

Tengo la siguiente estructura:

spoiler

Después declaro que es un array

circuito array[CANTI];

Y quiero mandarlo a una función para rellenar los datos de los circuitos:

rellenar(array);

La función rellenar es la siguiente:

spoiler

Me da error y la verdad esque no entiendo como arreglar esto, porque los array me funcion, las estructuras también me funcionan pero al crear una estructura array me dan errores con los punteros. ¿ Que hago mal?

1 respuesta
E

ostia ese ejercicio lo hice en java xDDD

Isengard

Yo pasaría en vez del array de golpe mediante un puntero (circuito * ej1) y luego los arrays empiezan por 0 por tanto ese for está mal:

EDIT: Y se me olvidaba la referencia sería así...

for (i = 0; i < CANTI; i++)
{
    ej1[i]->atributo = value
...
}
1 respuesta
FoxWinterMan

#367 Hmm lo voy a probar pero tambien por ejemplo necesito validar esa información antes de introducirla, como ves en el texto pone entre 40 y 80, al introducirlo e intentar validarlo con un do while, se me crasheaba.

Otra duda que me ha surgido: Pone en varios sitios que no se puede usar arrays como parametros de entra y salida de funciones pero yo lo veo a menudo en clase y en la internet, porque es mejor pasar la referencia al primer lugar en vez de el array completo?

Trabajando con arrays de estructuras siempre tendre q funcionar con punteros no?

¿Sera problema con los punteros?

Codigo completo de este enunciado:

spoiler

Codigo:

spoiler
gonya707

#365 cuando pases un array a una funcion en vez de usar esto:

void rellenar(circuito ej1[])

Usa esto otro

void rellenar(circuito * ej)

puesto que ahora es un puntero, dentro de la funcion se accede a sus atributos con -> en vez de ., y tienes que usar el indice entre corchetes para acceder a cada miembro, empezando por 0

1 respuesta
Isengard

Lo que dice #369 es lo que te quería decir yo pero en versión profesor! Bravo!

FoxWinterMan

Hoy le estoy dando durillo a esto, hay otro ejercicio que me causa muchas dudas, el enunciado es el siguiente:

spoiler

Hmm hay que definir una matriz de 5 filas y 7 columnas.
Al solicitar un año y un mes cualesquiera, como hacer para que el programa sepa que por ejemplo el 1 de enero de 2015 comienza el jueves? O que el 1 de febrero de 2015 es domingo?

1 respuesta
Overburden

Tengo unos ejercicios de C de punteros para la universidad que de momento no se por donde cogerlos, si queréis (si no es mucho abusar, no pretendo molestar) puedo subir los enunciados y que alguien diga como hacerlos.

1 respuesta
FoxWinterMan

#372 jaja dale enseñalos yo estoy haciendo C y bueno no va mal del todo pero igual tampoco soy el mas indicado para ayudarte.

gonya707

#371 tendras que tomar un año de referencia e ir sumando y restando. Encuentra un mes de enero que empiece en dia 1-lunes e intenta empezar representando ese mes de enero para tener la parte gráfica, y hacerlo de manera que cambiando dos parámetros, año Y mes te compute la posición del dia 1 en días de la semana.... el resto de dias se sacan solos si tienes solo ese dato

FoxWinterMan

Nuevas dudas con un ejercicio muy tipico:

spoiler

La palabra secreta es Malaga.

Dudas:

1º Iré introduciendo letras y pasando a una funcion llamada comprobar, al introducir la "a" en la palabra Malaga se encuentra 3 veces en las posiciones 2-4-6, como hago para que recorra todo el array de la palabara secreta y cuando se encuentre con una "a" la almacene y la pueda mostrar en esa misma funcion u otra?

2º El array de la palabra que estoy formando, como hago para mostrar las letras que he acertado con digamos barras bajas?

3º Tiene que salir el muñeco famoso del ahorcado, tengo 5 intentos, mi idea es hacer un swith en el cual por cada fallo que des te muestre el estado del muñequito, en el caso 1 saldria solo la cabeza, caso 2 cabeza y manos, etc... Hay alguna manera de mejorar este sistema?

1 respuesta
M

#375
Te respondo a la 1 ya que la dos no entiendo muy bien a que te refieres.
Yo lo resolvería utilizando un bucle for y con un if en cada iteración, del estilo:

void comprobar(char[] palabra,char letra) {
for (----) {
if (palabra[i] == letra)
    hazloquesea;
              }
}

Para la 3 la veo bien con un switch

KooPad

Una duda, con el sublime text ya tengo suficiente para programar en c++ o necesito de algún compilador? (mingw)

1 respuesta
B

#377 necesitas un compilador

para c++, yo tiraria de visual studio.

1 1 respuesta
KooPad

#378 Perfecto, gracias!

KooPad

Sabéis porque me salta este error?

1 respuesta
Saiko9

A ver si alguno me puede resolver un par de dudas que tengo por aqui:

Me podéis explicar las variables condicionales? es que no las entiendo nada xD y otra cosa: que puta diferencia hay entre cerrojos y semoforos? según tengo entendido los semaforos tienen un contador y hacen que por ejemplo 3 hilos puedan estar en la sección crítica (dependiendo de como inicialices el contador) y los cerrojos tienen exclusión mutua (solo 1 en la sección crítica) no se si es esa la diferencia o si hay algunas mas o que porque no lo tengo muy claro.

Gracias

#380 Tiene toda la pinta de que no has añadido el compilador al PATH del sistema operativo para que te reconozca los comandos g++ pero no tengo mucha idea ya que yo lo hago todo en linux con el compilador de GNU que te viene de serie.

2 respuestas
KooPad

#381 Yo he pensado lo mismo pero es que lo tengo ya añadido y sigue todo igual :O

1 respuesta
Gif

#382 has añadido el bin?

1 respuesta
Fyn4r

#381 a ver si no meto la pata que no lo tengo tan fresco como debería /me gustaría:

Las variables condicionales te permiten hacer "espera pasiva" con los mutex, es decir, el thread se va a dormir (pthread_cond_wait) y se queda así hasta que alguien lo despierte (pthread_cond_signal despierta a un solo thread, pthread_cond_broadcast despierta a todos). Esto puede ser interesante cuando por ejemplo:

  • Necesitas un mutex pero está ocupado. Esto se podría arreglar con un while y un trylock o alguna cosa de estas, el tema aquí es que estarías haciendo "espera activa", estarías consumiendo recursos para nada.
  • Tus threads no tienen más trabajo que hacer hasta que alguien se lo proporcione (por ejemplo el problema típico de productores / consumidores).

La diferencia entre mutex y semáforo tampoco la tuve nunca muy clara pero si, se supone que un mutex es el caso particular de un semáforo con el contador a 1.

P.D perdón por el spanglish xD

1 respuesta
KooPad

#383 Si, ademas he instalado MinGW y Dev-cpp. Mira:

Pero me sigue saliendo lo mismo:

2 respuestas
Gif

#385 Pon Comillas en "C:\Program Files (x86)\Dev-Cpp\MinGW64\bin";

1 respuesta
KooPad

#386

No será cosa del sublime text? No se que cojones puede ser.

Gif

Pues no se, prueba a abrir un cmd y usar ahí g++

1 respuesta
KooPad

#388 El problema era que dejaba un espacio entre variables. Gracias!

Saiko9

#384 mil gracias, a ver si ahora me puedo poner a hacer los ejercicios de variables condicionales xD

Usuarios habituales