Yo hice lo mismo, pero para todo youtube, es una forma de agradecerlo. Pero igualmente doné un poquito, porque me pareció muy amable y muy útil el canal. Lo digo por si alguien se anima también y así que vea que tiene apoyo y continúe con su canal
Me ha encantado el video, aunque estos 2 o 3 últimos vídeos si que los tendré que repasar porque lo de los vectores aunque comprendo más o menos cómo funcionan no lo he asimilado del todo, son muchas cosas nuevas. Gracias por los vídeos.
Son geniales los vídeos, lo único que he echado de menos es un tutorial (que no se si lo habrá más adelante) en el que expliques los errores que da al compilar, como los llama y a que se suelen deber. Así en vez de buscar las diferencias entre el tutorial y mi código podría intentar ver cual es el fallo. Mil gracias! Eres un crack
Resumen de este video: vec[i] es lo mismo que *(vec+i). Y el nombre de un vector solo, sin corchetes ni nada, no es más que un puntero a la primera posición del vector.
Exacto ! Saber que un vector en realidad es un puntero que tiene almacenada la direccion de memoria del primer elemento del vector y que justamente apunta a ese elemento, aclara varias dudas. Para acceder al segundo elemento, avanzas una posicion de memoria, por eso el *(vec+1) que dice: a lo que apunta vec+1. O en el caso del for: *(vec+i).
Y si quiero guardar un nuevo valor en la misma posición de memoria dentro de una función? Puedo guardar una tabla en la misma variable, pero si intento que mantenga la dirección en la memoria me pone mal uno de los valores int
He estado probando y creo que resulta más sencillo poner esto en la parte del sorteo, al menos a mí me ha funcionado, lo pego: void loteria (int *v){ int i,dado; for (i=1;i
El video, como todos está muy bien. En el ejemplo del dado sobra el "case", porque siempre la operación es la misma *(vec+aux)++ o lo que es lo mismo *(vec+aux)=*(vec+aux)+1
como consejo para la gente que este ultimo tema le queda un poco nublado yo me he olvidado de usar los vectores de esta forma y los uso como en el video anterior, por que es la manera que los entiendo perfectamente y total es lo mismo
/* ********************** Hola amigo, excelente video, creo que el switch no es necesario, aqui esta el codigo de mi version funcionando para el que lo quiera ver ya que algunos comentan que no anda sin el switch. Gracias por hacer tan excelentes videos. ********************** Bloque 05.03.02; Calcular la probabilidad de que salga cada uno de los numeros de un dado de 6 lados usando punteros. Calcular 10000 iteracciones Version de César Gamboa */ #include void funcLanzarDado(int v[6]); void funcLeerResultados(int v[6]); int main() { int vVector01[]={1,2,3,4,5,6}; //Se va a usar como un contador, cada resultado del dado se le va a sumar 1 a la parte correspondiente funcLanzarDado(vVector01); // Se llama a la funcion de lanzar dado con el vector como parametro funcLeerResultados(vVector01); system("pause"); return 0; } void funcLanzarDado(int *v) //Se recibe el vector como parametro peo como se va a tratar con punteros se define con el simbolo '*' { //Se crea un numero aleatorio //Se crea una semilla para captar un numero largo aleatorio int aux; srand(time(NULL)); int i; for(i=0;i
¿podrías hacer ejemplos donde el usuario ingrese el tamaño de la longitud del vector? me seria de mucha ayuda gracias! espero me puedas responder si si o si no.
Con lo que me ha enseñado a través de sus vídeos y aprendido de Internet estoy haciendo un juego de batallas por turnos, y lo que quiero lograr es que si un golpe es seleccionado, el rango de daño en la vida sea de entre 10 y 20. A base de mi escasa creatividad he hecho lo siguiente. //Número aleatorio. #include int main (){ int x; int i; srand (time(NULL)); x = rand () % 20; for (i=0;i=0&&x=10&&x
que pasa si no usas el condicional switch, es decir a mi parecer no hace falta ya que el numero que arroje la variable aux no va a cambiar mientras el bucle no de otra vuelta, asi que simplemente se le sumara uno a la posicion del vector.
Totalmente innecesario ese switch, si en todos los casos hace lo mismo, hubiera bastado con poner *(vec+aux)+=1; Así se ahorraban un montón de líneas de código y tiempo en comparaciones. Igualmente muy buen trabajo, muy bien explicado todo :)
Disculpe la molestia, no comprendo el porque se utilizan punteros si de todas maneras al modificar los valores de un vector en una funcion los valores se quedan modificados en la funcion main, me explico, hice un programa en el cual cree un vector y le meti como valores el 1,2 y el 3, ademas cree una funcion (llamada fun) en la cual a ese vector se le suma un 5, quedando los valores del vector como 6, 7 y 8, luego imprimi los valores del vector en la funcion fun y me imprimio 6,7,8 luego imprimi los valores del vector fuera de la funcion fun y me sigue dando 6, 7 y 8. No se supone que los punteros son para "extraer" mas de un solo valor de variables utilizadas en una funcion?, entonces si el vector conserva los valores que se le asignaron en la funcion fun , entonces para que se usan los punteros?.
Hola ante todo queria agradecer sus videos tutoriales, estan muy pero muy bien explicados, realmente con usted estoy aprendiendo mucho. Tengo una duda, ojala usted tenga tiempo y me la responda: Sino me equivoco en el video anterior, usted dijo que los punteros no hacen falta en los vectores, ya que cuando se le pasa como argumento un vector a una funcion, ésta modifica el vector original, o sea no crea una nueva variable en memoria, entonces me surge la duda de por que en este video, se usan punteros en vectores. De vuelta muchas gracias y perdon por el comentario tan largo
He hecho el segundo problema pero sin punteros, ya que me parece mucho más sencillo y me ha permitido ahorrarme código. #include void dado (int a[]); void leer (int a[]); int main () { int v[6] = {0,0,0,0,0,0}; dado (v); leer (v); system ("pause"); return 0; } void dado (int a[]){ srand (time(NULL)); int i,aux; for (i=0;i
ni te preocupes ya lo e resuelto 1 necesitaba otras librerias 2 no abia declarado como flotante la variable disculpa la molestia sigo practicando jejeje...
Hola muy buenas exelente video este cada vez aprendo mas e tenido un problemilla con srand y es que estoy en linux y parece que se utiliza de otra forma lo buscare en google pero si saves cual es te agradeceria que me lo digeces asi no boy dando tumbos por hay jejeje muchas gracias un saludo.
Tengo una duda: Tanto en el printf del segundo ejemplo como en el scanf a la hora de referirte al vector lo pones entre paréntesis ,*(vec+i)), he probado sin los paréntesis y no cambia nada. ,*vec+i); Me puedes explicar si los paréntesis responden a algún tipo de función o simplemente los pones para aclarar que dentro hay una suma? Gracias.
Mmm no se a que te referis que no cambia en nada. Yo lo veo asi: si haces un printf de *(vec+i) se mostrara el elemento de la primera posicion+i. Por ejemplo si vec={1,5,7} e i=2 se mostrara el 7. Por el contrario si haces printf de *vec+i yo pienso que el * solo afecta a vec, por ende, siguiendo el ejenplo anterior, se mostrara la suma del primer elemento del vector ( ya que *vec significa: a lo que apunta vec, y justamente vec es un puntero que tiene almacenada la posicion de memoria del primer elemento del vector) más i, entonces queda: 1+2=3.
yo lo había hecho todo en una misma función. int main (){ int i; int vec[10]; for (i = 0; i < 3; i++){ printf (" Introduce un valor para la posicion %i del vector: ",i); scanf ("%i",(vec+i)); } i = 0; for (i = 0; i < 3; i++){ printf ("%i ",*(vec+i)); } system ("pause"); return 0; }
hola como hago para imprimir en que posicion del vector se encuentra un numero ya guardado
9 ปีที่แล้ว
En el caso anterior usted hacía un llamado a la la función con punteros de esta forma: imprimir(&vec); y declaraba la función con punteros así: int imprimir(int *a){}; Y yo entendía que el a=&vec. Pero ahora veo que es igual pero en vez de poner el &vec al declarar en el main la función,solo le pone "vec". Quisiera despejar esa duda...
hola Emilio, tengo una duda, es que en el ejemplo 2 de este video lo intente realizar solo, pero siempre que lo ejecuto me sale algún valor negativo, pero no se si es normal, y muchas gracias he aprendido bastante con tus videos, mira esto es lo que he echo: //calcular la probabilidad de que un numero salga en un dado con un vector en 10000 tiros #include void probabilidad(int *vector); void leer(int*vector); int main (){ int vector[]={0,0,0,0,0,0}; probabilidad(vector); leer(vector);
} void probabilidad (int*vector){ srand(time(NULL)); //es para sacar numeros aleatorios int i,a; for(i=0;i
si pones (vec+i) hace referencia a la direccion de memoria no?. en el caso de ponerle * es el dato que le asignaste a ese puntero?. PD: hace falta poner la libreria #include ?.
Hola porque no lo haces que sea real los números aleatorios del 1 al 6 en vez del 0 al 5. Muchas gracias (eres muy bueno, me gustan tus videos un montón)
Hola Emilio, te hago una consulta: tengo un problema que me impide avanzar con los vectores, no puedo hacer los ejercicios por mi cuenta ya que me tira un error al compilar. #include int main(){ int i; int vec[] = (1,2,3); for (i=0 ; i
Hola que tal, una duda o más bien pregunta, *(vec+i) equivale a ¿ vec[i] ? lo hize de las 2 formas y al parecer me sale lo mismo, supongo solamente es para ver el funcionamiento con punteros ¿cierto?
es curioso lo dificil que es hacer tu trabajo por que en un solo video le dejas claro a todo el mundo como funcionan las cosas y no suele haber preguntas como pasaria en cualquier clase expuesta presencialmente eso pocos profesores del mundo lo logran
hola", yo tengo esto así, pero no sale, ya cambie mil veces las cosas y sigue marcándome errores, que hago? #include #include #include #include float EDO(float y[],float dydx[]); // prototipo int main(){ float *x,y[10],x0,xf,y0[10],dydx[10],h; int i,N, Neq; FILE *Archivo; Archivo = fopen ("Resultados.txt", "w"); Neq=10; scanf("%i",&N); x= (float*)malloc(N*sizeof(float)); x0=(float*)malloc(N*sizeof(float)); xf= (float*)malloc(N*sizeof(float)); x0=0.0; //Valor inicial de la variable independiente xf=10.0; y0[0]=0.0; //Valor inicial de la variable dependiente y0[1]=0.0; y0[2]=0.0; me dice que tengo tipos incompatibles con float
Buenas a todos, tengo una duda. Por qué usamos en el ejercicio del dado los punteros? Por ejemplo en esta parte del código pongo el puntero en case4 y no lo pongo en case5 y me compila igual y se ejecuta igual case 4:{ *(v+aux)+=1; break; } case 5:{ v[aux]+=1; break; } Gracias de antemano
JaviCc Vaya, me has hecho ver mi propio video (lo cual resulta raro), en el minuto 0:40 aproximadamente explico de que va el video y lo que digo es que voy a enseñar una nueva forma para acceder a los datos de un vector... es decir, que son iguales ambas formas, por supuesto. Te pediría que en el futuro antes de postear te vieras un par de veces los videos si tienes dudas porque realmente lo suelo explicar casi todo y tras un año y pico, lo que no esta en los videos suele estar en los comentarios del mismo ya contestado. En el caso de que tu duda no este explicada en el video o en los comentarios, sera un placer responderte! Un saludo :D.
No entiendo muy bien para que ponemos el switch, cuando en todas las situaciones se lleva acabo la misma función, he probado a hacerlo sin el switch y da el mismo resultado, así que para que sirve el switch en este caso?
+yerai pros pues supongo yo que porque son ejercicios de aprendizaje, no necesariamente optimizados y pues si eres principiante de paso prácticas switch .. no creo que muchos se den cuenta de que se puede omitir el switch ya que estamos concentrados en los punteros y operaciones
El switch ese no nos vale para mucho realmente, no? Al fin y al cabo siempre hará *(vec+aux)++, por lo que no nos hace falta una estructura selectiva (como seria el switch).
Rodrigo Santos Buenas, pues a partir de ahora cuando tengas una duda del tipo, ¿Se podria hacer de tal manera? Lo que tienes que hacer es probarlo, asi es como se aprende a programar de verdad, asi que adelante, prueba y saca tus propias conclusiones y luego, si quieres, puedes compartirlas aqui. Un saludo y a seguir aprendiendo!
En que video explicas lo de punteros en funciones? Este es el segundo video que veo de punteros y lo das por entendido, en todo caso, mi duda es en scanf, por que hay que poner vec+i???
+Franco Taborda Lo mejor es no preguntarlo y buscarlo tu mismo, cada vídeo tiene un titulo y una descripción, por lo que lo podrás ver fácilmente. Aquí tienes la lista de reproducción con todos los vídeos: th-cam.com/play/PLw8RQJQ8K1ySN6bVHYEpDoh-CKVkL_uOF.html Un saludo.
+Empieza A Programar Vi desde el primer vídeo de punteros hasta este vídeo y en ningún lugar dices el porque de lo que te pregunto, lo único que aclaras es que normalmente se pone la posición del elemento que se quiere reemplazar adentro de los corchetes.
Hola! He intentado hacer el ejercicio del algoritmo de la probabilidad introduciendo el numero de iteraciones como parametro de entrada "n", una vez sustituidos los "10000" por "n", cuando lo sustituyo en la variable "x" de probabilidad me da error , ya ponga el punto en el numerador o en el denominador, ¿A alguien se le ocurre que sucede?
Diyar Bakir Vásquez Silva Pues para eso, tendras que pensarlo tu mismo, si te ves todos los videos de vectores se te ocurrira, ya que es realmente sencillo, pero la gracia de la programacion es pensar en como usar una herramient (C en este caso), no lo contrario. Un saludo.
Empieza A Programar lo intenté así #include int main(){ int x, i, a[5]= {9,8,7,5,3}; printf ("indique la posicion del dato q desea ver: "); scanf("%i", &x);
for(i = 0 ; i< 5; i++){ } if(x== a[i]){ printf("el %i esta en posicion %i", x, a[i]); } else{ printf("%i no existe en la lista ", x); } system("pause"); return 0; } no obstante no ocurre lo que busco
Diyar Bakir Vásquez Silva amigo como estas, voy en este video aprendiendo a programar, no se si todavia tengas esta duda igual te dare mis dos posibles soluciones: Si lo que quieres es dar una posicion del vector y saber que valor tiene, esta este programa: #include int main(){ int x, i, a[5]= {9,8,7,5,3}; printf ("indique la posicion del dato q desea ver: "); scanf("%i", &x); printf ("el numero en la posicion %i es: %i ",x,a[x]); system("pause"); return 0; } y el otro ejercicio es saber si un dato existe en un vector y en que posicion esta, hice este programa: #include int main(){ int y, i, a[5]= {9,8,7,5,3}; printf ("introduce un numero para y: "); scanf ("%i", &y); for (i = 0 ; i < 5 ; i++){ //printf ("%i, ",a[i]); if (y == a[i]){ printf ("el numero %i introducido para Y si existe y es el numero %i y esta en la posicion %i ",y,a[i],i); } } system("pause"); return 0; }
en los ejemplos que salen al principio del video del vec [] = 1,2,3 me imprime solamente el 2; en el siguiente ejemplo me imprime solamente el 8 tengo la vercion mas reciente de dev c++ con el TDM-GCC (pense que tenia que ver con el compilador) y descarge a la vercion que esta e el video con el compilador Mingw e imprime lo mismo ("guarde con nom_archivo.c")
andrew Osorio Dale al cuarto boton, el de rebuild o reconstruir todo y seguro que no habra problema. Tambien ten en cuenta que estes leyendo bien el vector. Un saludo.
Tengo un serio problema aunque creo que probablemente sea un bug de la versión ya que ami los floats desde que empece no me dan decimales, me dan los números exactos continuados de un punto y ceros ej: 17.00000 no me da decimales, a lo mejor alguien sabe como solucionarlo, gracias de antemano !
En el resultado todos me dan el mimo numero es decir que no me da la totalidad del 100% Aca esta el codigo #include void sorteo(int *vec); void leer(int *vec); int main(){ int vec[] = {0,0,0,0,0,0}; sorteo(vec); leer(vec); system("pause"); return 0; } void sorteo(int *vec){ srand (time(NULL)); int i,aux; for(i = 0; i < 10000; i++){ aux = rand()%6; switch (aux){ case 0:{ *(vec+aux) +=1; break; } case 1:{ *(vec+aux) +=1; break; } case 2:{ *(vec+aux) +=1; break; } case 3:{ *(vec+aux) +=1; break; } case 4:{ *(vec+aux) +=1; break; } case 5 : { *(vec+aux) +=1; break; } } } } void leer(int *vec){ int i; float x; for (i=0; i
Entre otras cosas, es para no ocupar mucha memoria, exactamente, si tienes una cosa en memoria y lo puedes usar desde varios lugares diferentes (por ejemplo varias funciones diferentes), te ahorras tenerlo de forma repetida, por lo que ahorra memoria y tiempo de volver a crearlo. Un saludo.
Hola, en el primer ejemplo que pones, a mí solamente me imprime el segundo número, lo he repasado 20 veces y he usado el depurador, y no encuentro la solución. Alguien me puede ayudar? #include void funcion (int *vec); void imprimir (int *vec); int main(){ int vec[3];
funcion (vec); imprimir (vec); system ("pause"); return 0; } void funcion (int *vec){ int i; for (i = 0 ; i < 3 ; i++){ printf ("Introduce un valor para la posicion %i: ",i+1); scanf ("%i", (vec+i)); } } void imprimir (int *vec){ int i; for (i = 0 ; i < 3 ; i++){ printf ("%i ",*(vec+1)); } }
Hola a todos. ¿Podrían ayudarme en una duda que me surgió? Mi duda es que si puedes poner el "case" en un bucle, en un switch. Saludos, gracias. #include void operation (int *v, int *n); void imprimir (int *v, int *n); int main (){ int n; printf ("Introduce de cuantos numeros estamos parlando y te daré la probabilidad: "); scanf ("%i", &n); int v [n]; operation (v, n); imprimir (v, n); system ("pause"); return 0; } void operation (int *v, int *n){ srand (time(NULL)); int i, aux, j; for (i = 0 ; i < 10000; i++){ aux = rand ()%*n; switch (aux){ /*AQUIII+/ for (j = 0 ; j < *n ; j++){ /*AQUIII+/ case 0 + j: { /*AQUIII+/ *(v+aux) += 1; /*AQUIII+/ break; /*AQUIII+/ } } } } } void imprimir (int *v, int *n){ int i; float x; for (i = 0; i < *n ; i++){ x = (*(v)*100) / 10000; printf ("La probabilidad de que el numero %i salga es de: %f. ",i+1, x); } printf (" "); }
+Daniel Gonzalez La unica forma que se me ocurre a mi. Es ir guardando los aleatorios en un vector. y compara si todos los elementos guardados que tiene el vector son distintos al nuevo numero generado. si es asi, que guarde. Sino que de otra vuelta.
a se me olvidaba el codigo al final te pongo los mensages de error del compilador #include void sorteo(int *vect); void imprimir(int *vect); int main(void){ int vect[] = {0,0,0,0,0,0}; sorteo(vect); imprimir(vect); return 0; } void sorteo(int *vect){ srand(time(NULL)); int i, aux; for(i = 0; i < 10000; i++){ aux = rand()%6; switch(aux){ case 0:{*(vect+aux) += 1;break;} case 1:{*(vect+aux) += 1;break;} case 2:{*(vect+aux) += 1;break;} case 3:{*(vect+aux) += 1;break;} case 4:{*(vect+aux) += 1;break;} case 5:{*(vect+aux) += 1;break;} } } } void imprimir(int *vect){ int j, x; for(j = 0; j < 6; j++){ x = (*(vect+j)*100)/10000.; printf("La probabilidad de que el numero %d salga es de %f: ", j+1, x); } } ejercisio_27.c: En la función ‘sorteo’: ejercisio_27.c:19:2: aviso: declaración implícita de la función ‘srand’ [-Wimplicit-function-declaration] ejercisio_27.c:19:2: aviso: declaración implícita de la función ‘time’ [-Wimplicit-function-declaration] ejercisio_27.c:23:3: aviso: declaración implícita de la función ‘rand’ [-Wimplicit-function-declaration] ejercisio_27.c: En la función ‘imprimir’: ejercisio_27.c:38:3: aviso: formato ‘%f’ espera un argumento de tipo ‘double’, pero el argumento 3 es de tipo ‘int’ [-Wformat] La compilación ha terminado con éxito. y se compila con exito XD
EL ARCADEMAN En la funcion imprimir declaraste x como entero (int), tenes que declararla como float. En el printf de imprimir pusiste %d y tenias que poner %i. La advertencia de srand no se por que es. Suerte.
ok gracias %d tambien imprime enteros no se a que se deve pero asi me lo enseñaron en un curso que hice. no se enfocaba en c pero vimos un poquito, en ese momento usaba linux y siempre use %d. si que e declarado mal x muchas gracias
alguien me explica por que no funciona mi codigo? #include #include #include #include void sorteo (int *vec); void leer(int *vec); int main(){ int vec[]={0,0,0,0,0,0}; sorteo(vec); leer(vec); printf("Hola"); system("pause"); return 0; } void sorteo(int *vec){ srand(time(NULL)); int i, aux; for(i=0; i
No entendí porque hacerlo con el switch.. yo lo hice sin el. #include void sorteo(int *vec,int tope, int iter); void muestravectorpointer(int *vec, int tope,int iter); int main(){ int v[]={0,0,0,0,0,0},x=6,it=10000; sorteo(v,x,it); muestravectorpointer(v,x,it);
system("pause"); return 0; } void sorteo(int *vec,int tope, int iter){ srand(time(NULL)); int i,c,l; for (c=1;c
me da un error aqui srand(time(NULL)); para ver cual es el error ke tengo #include void sorteo(int *vec); void leer(int *vec); int main() { int vec[]={0,0,0,0,0,0}; sorteo(vec); leer(vec); return 0; } void sorteo(int *vec) { srand(time(NULL)); int i,aux; for(i=0;i
+ngoeslink Eso pensé yo, pero lo intente hacer y me daba problemas así que lo he hecho sin punteros. Lo acabo de poner en un comentario por si te interesa.
Tengo una duda técnica, ¿porque hacemos todo el rato (vec+1) si el direccionamiento es a nivel de byte y un "integer" son 2 bytes (16 bits)? si haces +1 te vas al siguiente byte que no coincide con el principio del siguiente entero. (Esto si ocurre con los "char" ya que ocupan 1 byte cada carácter en memoria)
Porque el puntero sabe a que tipo de dato esta apuntando, por lo cual al sumarle 1 se mueve a la siguiente direccion teniendo en cuenta el tipo de dato del puntero
Estoy volando en esta webada de punteros, alguien podría decirme porque no funciona mi programa, se los agradecería. #include void puntero (int *vec); void ayuda (int *vec); int main (){ int vec[3]; puntero(vec); ayuda(vec); system ("pause"); return 0; } void puntero (int *vec){ int i; for (i=0; i
les agregue esas librerias y ahora me da error en todos los casos alguien que me eche una manito.. #include #include #include void sorteo(int *vec); void leer(int *vec); int main() { int vec[]={0,0,0,0,0,0}; sorteo(vec); leer(vec); return 0; } void sorteo(int *vec) { srand(time(NULL)); int i,aux; for(i=0;i
yo puse de esta manera pero no me compila podrias ver el error y corregirlo ? #include void sorteo (int *vec){ void leer (int *vec){ int main (){ int vec []={0,0,0,0,0,0}; sorteo(vec); leer(vec); system ("pause"); return 0; } void sorteo (int *vec){ srand(time(NULL)); int i,aux; for (i=0; i
amigo tu explicacion no estuvo muy acertada por ejemplo nunca explicastes xq pones 0s en las 6 posiciones o por que cuando se le suma 1 a los valores de *(vec+aux) da como resultado un numero determinado cuando en la variable del vector cuando la declarastes pusistes puros 0 eres un exlente profesor la mayoria de tus videos los e entendido pero no des por hecho que los que ven los videos los entienden porfavor habemos personas q estamos comenzando y queremos aprender
me han servido mucho tus videos, me he quitado el ADBlock y lo posteo por si alguien gusta hacerlo
Yo hice lo mismo, pero para todo youtube, es una forma de agradecerlo.
Pero igualmente doné un poquito, porque me pareció muy amable y muy útil el canal.
Lo digo por si alguien se anima también y así que vea que tiene apoyo y continúe con su canal
Me ha encantado el video, aunque estos 2 o 3 últimos vídeos si que los tendré que repasar porque lo de los vectores aunque comprendo más o menos cómo funcionan no lo he asimilado del todo, son muchas cosas nuevas. Gracias por los vídeos.
Son geniales los vídeos, lo único que he echado de menos es un tutorial (que no se si lo habrá más adelante) en el que expliques los errores que da al compilar, como los llama y a que se suelen deber. Así en vez de buscar las diferencias entre el tutorial y mi código podría intentar ver cual es el fallo.
Mil gracias! Eres un crack
Resumen de este video: vec[i] es lo mismo que *(vec+i). Y el nombre de un vector solo, sin corchetes ni nada, no es más que un puntero a la primera posición del vector.
Oye tu muy bien, ya había visto dos veces el video y no entendía, hasta que leí tu bendito comentario.
ole tu te quiero!
Exacto ! Saber que un vector en realidad es un puntero que tiene almacenada la direccion de memoria del primer elemento del vector y que justamente apunta a ese elemento, aclara varias dudas.
Para acceder al segundo elemento, avanzas una posicion de memoria, por eso el *(vec+1) que dice: a lo que apunta vec+1. O en el caso del for: *(vec+i).
Y si quiero guardar un nuevo valor en la misma posición de memoria dentro de una función? Puedo guardar una tabla en la misma variable, pero si intento que mantenga la dirección en la memoria me pone mal uno de los valores int
Más sencillo, todos los vectores o arreglos son en si apuntadores., pero se pueden reescribir como un puntero o apuntador
He estado probando y creo que resulta más sencillo poner esto en la parte del sorteo, al menos a mí me ha funcionado, lo pego:
void loteria (int *v){
int i,dado;
for (i=1;i
me exploto un pcoo le cerebro pero re contra aprendii mil gracias
Exelentes explicaciónes, gracias y saludos.
exelentes clases de programacion en C++
Gracias! Aunque recuerda que no es C++, sino C lo que enseño :D
Solo que no era necesario hacer un swich
bastaba con solo *(vec+aux)++;
asi es mas corto y eficiente
No funciona con ++, debes poner +=1
@@EvaristeG10 hola, podrías explicarme por qué no funciona con ++?
Exacto..
El video, como todos está muy bien. En el ejemplo del dado sobra el "case", porque siempre la operación es la misma *(vec+aux)++ o lo que es lo mismo *(vec+aux)=*(vec+aux)+1
Eso pense yo tambien, pero si pongo *(vec+aux)++ da error, tiene que ser *(vec+aux)+=1
como consejo para la gente que este ultimo tema le queda un poco nublado yo me he olvidado de usar los vectores de esta forma y los uso como en el video anterior, por que es la manera que los entiendo perfectamente y total es lo mismo
Gracias por los punteros , estoy en un curso y lo explican cómo el culo
/*
**********************
Hola amigo, excelente video, creo que el switch no es necesario, aqui esta el codigo de mi version funcionando para el que lo quiera ver ya que algunos comentan que no anda sin el switch.
Gracias por hacer tan excelentes videos.
**********************
Bloque 05.03.02; Calcular la probabilidad de que salga cada uno de los numeros de un dado de 6 lados usando punteros.
Calcular 10000 iteracciones
Version de César Gamboa
*/
#include
void funcLanzarDado(int v[6]);
void funcLeerResultados(int v[6]);
int main()
{
int vVector01[]={1,2,3,4,5,6}; //Se va a usar como un contador, cada resultado del dado se le va a sumar 1 a la parte correspondiente
funcLanzarDado(vVector01); // Se llama a la funcion de lanzar dado con el vector como parametro
funcLeerResultados(vVector01);
system("pause");
return 0;
}
void funcLanzarDado(int *v) //Se recibe el vector como parametro peo como se va a tratar con punteros se define con el simbolo '*'
{
//Se crea un numero aleatorio
//Se crea una semilla para captar un numero largo aleatorio
int aux;
srand(time(NULL));
int i;
for(i=0;i
Yo tuve que utilizar las bibliotecas stdlib.h
, time.h porque me decia que time, rand y srand no estaban declaradas, usando solo stdio.h
Gracias bro me ayudaste 😉
eres un fiera
¡Excelente!
¿Porqué en el segundo programa, minuto 6:41, imprime salto de linea si en el código no se puso
?
¿podrías hacer ejemplos donde el usuario ingrese el tamaño de la longitud del vector?
me seria de mucha ayuda gracias! espero me puedas responder si si o si no.
Con lo que me ha enseñado a través de sus vídeos y aprendido de Internet estoy haciendo un juego de batallas por turnos, y lo que quiero lograr es que si un golpe es seleccionado, el rango de daño en la vida sea de entre 10 y 20. A base de mi escasa creatividad he hecho lo siguiente.
//Número aleatorio.
#include
int main (){
int x;
int i;
srand (time(NULL));
x = rand () % 20;
for (i=0;i=0&&x=10&&x
que pasa si no usas el condicional switch, es decir a mi parecer no hace falta ya que el numero que arroje la variable aux no va a cambiar mientras el bucle no de otra vuelta, asi que simplemente se le sumara uno a la posicion del vector.
gracias por el video :) logre entenderlo solo me falto las librerias xd
GENIO!
Totalmente innecesario ese switch, si en todos los casos hace lo mismo, hubiera bastado con poner *(vec+aux)+=1; Así se ahorraban un montón de líneas de código y tiempo en comparaciones. Igualmente muy buen trabajo, muy bien explicado todo :)
Disculpe la molestia, no comprendo el porque se utilizan punteros si de todas maneras al modificar los valores de un vector en una funcion los valores se quedan modificados en la funcion main, me explico, hice un programa en el cual cree un vector y le meti como valores el 1,2 y el 3, ademas cree una funcion (llamada fun) en la cual a ese vector se le suma un 5, quedando los valores del vector como 6, 7 y 8, luego imprimi los valores del vector en la funcion fun y me imprimio 6,7,8 luego imprimi los valores del vector fuera de la funcion fun y me sigue dando 6, 7 y 8. No se supone que los punteros son para "extraer" mas de un solo valor de variables utilizadas en una funcion?, entonces si el vector conserva los valores que se le asignaron en la funcion fun , entonces para que se usan los punteros?.
Hola ante todo queria agradecer sus videos tutoriales, estan muy pero muy bien explicados, realmente con usted estoy aprendiendo mucho. Tengo una duda, ojala usted tenga tiempo y me la responda: Sino me equivoco en el video anterior, usted dijo que los punteros no hacen falta en los vectores, ya que cuando se le pasa como argumento un vector a una funcion, ésta modifica el vector original, o sea no crea una nueva variable en memoria, entonces me surge la duda de por que en este video, se usan punteros en vectores. De vuelta muchas gracias y perdon por el comentario tan largo
¿Es preciso el switch? Si quisiera hacerlo con los números de la Loto o del bingo serían muchos case y el código sería larguísimo.
He hecho el segundo problema pero sin punteros, ya que me parece mucho más sencillo y me ha permitido ahorrarme código.
#include
void dado (int a[]);
void leer (int a[]);
int main () {
int v[6] = {0,0,0,0,0,0};
dado (v);
leer (v);
system ("pause");
return 0;
}
void dado (int a[]){
srand (time(NULL));
int i,aux;
for (i=0;i
cuando sacaste el curso tenía 10 años jaja, y aquí me tienes
ni te preocupes ya lo e resuelto
1 necesitaba otras librerias
2 no abia declarado como flotante la variable
disculpa la molestia sigo practicando jejeje...
EXCELENTE
Hola muy buenas exelente video este cada vez aprendo mas
e tenido un problemilla con srand y es que estoy en linux y parece
que se utiliza de otra forma lo buscare en google pero si saves cual es
te agradeceria que me lo digeces asi no boy dando tumbos por hay jejeje
muchas gracias un saludo.
Hola solo tengo una duda se pueden hacer comparaciones entre vectores y matrices y que imprima una matriz resultante sin duplicados ??
Tengo una duda:
Tanto en el printf del segundo ejemplo como en el scanf a la hora de referirte al vector lo pones entre paréntesis ,*(vec+i)),
he probado sin los paréntesis y no cambia nada. ,*vec+i);
Me puedes explicar si los paréntesis responden a algún tipo de función o simplemente los pones para aclarar que dentro hay una suma?
Gracias.
Mmm no se a que te referis que no cambia en nada. Yo lo veo asi: si haces un printf de *(vec+i) se mostrara el elemento de la primera posicion+i. Por ejemplo si vec={1,5,7} e i=2 se mostrara el 7.
Por el contrario si haces printf de *vec+i yo pienso que el * solo afecta a vec, por ende, siguiendo el ejenplo anterior, se mostrara la suma del primer elemento del vector ( ya que *vec significa: a lo que apunta vec, y justamente vec es un puntero que tiene almacenada la posicion de memoria del primer elemento del vector) más i, entonces queda: 1+2=3.
Alguien sabe por que me da error de invalid initializer in function main?
yo lo había hecho todo en una misma función.
int main (){
int i;
int vec[10];
for (i = 0; i < 3; i++){
printf (" Introduce un valor para la posicion %i del vector: ",i);
scanf ("%i",(vec+i));
}
i = 0;
for (i = 0; i < 3; i++){
printf ("%i ",*(vec+i));
}
system ("pause");
return 0;
}
hola como hago para imprimir en que posicion del vector se encuentra un numero ya guardado
En el caso anterior usted hacía un llamado a la la función con punteros de esta forma: imprimir(&vec); y declaraba la función con punteros así: int imprimir(int *a){};
Y yo entendía que el a=&vec. Pero ahora veo que es igual pero en vez de poner el &vec al declarar en el main la función,solo le pone "vec". Quisiera despejar esa duda...
Exelente!!
hola Emilio, tengo una duda, es que en el ejemplo 2 de este video lo intente realizar solo, pero siempre que lo ejecuto me sale algún valor negativo, pero no se si es normal, y muchas gracias he aprendido bastante con tus videos, mira esto es lo que he echo:
//calcular la probabilidad de que un numero salga en un dado con un vector en 10000 tiros
#include
void probabilidad(int *vector);
void leer(int*vector);
int main (){
int vector[]={0,0,0,0,0,0};
probabilidad(vector);
leer(vector);
}
void probabilidad (int*vector){
srand(time(NULL)); //es para sacar numeros aleatorios
int i,a;
for(i=0;i
si pones (vec+i) hace referencia a la direccion de memoria no?. en el caso de ponerle * es el dato que le asignaste a ese puntero?.
PD: hace falta poner la libreria #include ?.
También en mi caso tuve que agregar la librería #include
Buenas, tengo una duda: porqué no se le pone el "&" antes de (vec+i)?
4:30
Emilio: Para calcular la probabilidad solo hay que dividir total de éxitos entre total de eventos.
Hola porque no lo haces que sea real los números aleatorios del 1 al 6 en vez del 0 al 5. Muchas gracias (eres muy bueno, me gustan tus videos un montón)
Hola Emilio, te hago una consulta: tengo un problema que me impide avanzar con los vectores, no puedo hacer los ejercicios por mi cuenta ya que me tira un error al compilar.
#include
int main(){
int i;
int vec[] = (1,2,3);
for (i=0 ; i
El problema es que no se inicializan los vectores con paréntesis "(", sino con llaves "{".
Un saludo.
int vec[] = {1,2,3} //tu pusiste (1,2,3)
Hola que tal, una duda o más bien pregunta, *(vec+i) equivale a ¿ vec[i] ? lo hize de las 2 formas y al parecer me sale lo mismo, supongo solamente es para ver el funcionamiento con punteros ¿cierto?
Raúl Crüez Tienes que volver a verte el video, creo que ahi se explica lo suficientemente bien como para que te quede claro.
Un saludo.
Turn down for what!
uf he notado un salto de dificultad bastante grande en la linea de aprendizaje que llevavamos hasta aqui jeje
es curioso lo dificil que es hacer tu trabajo por que en un solo video le dejas claro a todo el mundo como funcionan las cosas y no suele haber preguntas como pasaria en cualquier clase expuesta presencialmente eso pocos profesores del mundo lo logran
Uso el programa Zinjai y copie este codigo:
#include
#include
#include
int main(){
int i;
int vec[]=(1,2,3);
for (i=0;i
hola", yo tengo esto así, pero no sale, ya cambie mil veces las cosas y sigue marcándome errores, que hago?
#include
#include
#include
#include
float EDO(float y[],float dydx[]); // prototipo
int main(){
float *x,y[10],x0,xf,y0[10],dydx[10],h;
int i,N, Neq;
FILE *Archivo;
Archivo = fopen ("Resultados.txt", "w");
Neq=10;
scanf("%i",&N);
x= (float*)malloc(N*sizeof(float));
x0=(float*)malloc(N*sizeof(float));
xf= (float*)malloc(N*sizeof(float));
x0=0.0; //Valor inicial de la variable independiente
xf=10.0;
y0[0]=0.0; //Valor inicial de la variable dependiente
y0[1]=0.0;
y0[2]=0.0;
me dice que tengo tipos incompatibles con float
Buenas a todos, tengo una duda. Por qué usamos en el ejercicio del dado los punteros? Por ejemplo en esta parte del código pongo el puntero en case4 y no lo pongo en case5 y me compila igual y se ejecuta igual
case 4:{
*(v+aux)+=1;
break;
}
case 5:{
v[aux]+=1;
break;
}
Gracias de antemano
JaviCc Vaya, me has hecho ver mi propio video (lo cual resulta raro), en el minuto 0:40 aproximadamente explico de que va el video y lo que digo es que voy a enseñar una nueva forma para acceder a los datos de un vector... es decir, que son iguales ambas formas, por supuesto.
Te pediría que en el futuro antes de postear te vieras un par de veces los videos si tienes dudas porque realmente lo suelo explicar casi todo y tras un año y pico, lo que no esta en los videos suele estar en los comentarios del mismo ya contestado. En el caso de que tu duda no este explicada en el video o en los comentarios, sera un placer responderte!
Un saludo :D.
Muchísimas gracias! Lo haré así ^^
No entiendo muy bien para que ponemos el switch, cuando en todas las situaciones se lleva acabo la misma función, he probado a hacerlo sin el switch y da el mismo resultado, así que para que sirve el switch en este caso?
+yerai pros el switch se puede omitir
+Saso San entoces para que lo pone?
+yerai pros pues supongo yo que porque son ejercicios de aprendizaje, no necesariamente optimizados y pues si eres principiante de paso prácticas switch .. no creo que muchos se den cuenta de que se puede omitir el switch ya que estamos concentrados en los punteros y operaciones
El switch ese no nos vale para mucho realmente, no? Al fin y al cabo siempre hará *(vec+aux)++, por lo que no nos hace falta una estructura selectiva (como seria el switch).
se podria hacer este mismo ejercicio con vectores. pero sin usar punteros?
Rodrigo Santos Buenas, pues a partir de ahora cuando tengas una duda del tipo, ¿Se podria hacer de tal manera? Lo que tienes que hacer es probarlo, asi es como se aprende a programar de verdad, asi que adelante, prueba y saca tus propias conclusiones y luego, si quieres, puedes compartirlas aqui.
Un saludo y a seguir aprendiendo!
Prócer del universo
En que video explicas lo de punteros en funciones? Este es el segundo video que veo de punteros y lo das por entendido, en todo caso, mi duda es en scanf, por que hay que poner vec+i???
+Franco Taborda Lo mejor es no preguntarlo y buscarlo tu mismo, cada vídeo tiene un titulo y una descripción, por lo que lo podrás ver fácilmente.
Aquí tienes la lista de reproducción con todos los vídeos:
th-cam.com/play/PLw8RQJQ8K1ySN6bVHYEpDoh-CKVkL_uOF.html
Un saludo.
+Empieza A Programar Vi desde el primer vídeo de punteros hasta este vídeo y en ningún lugar dices el porque de lo que te pregunto, lo único que aclaras es que normalmente se pone la posición del elemento que se quiere reemplazar adentro de los corchetes.
Hola! He intentado hacer el ejercicio del algoritmo de la probabilidad introduciendo el numero de iteraciones como parametro de entrada "n", una vez sustituidos los "10000" por "n", cuando lo sustituyo en la variable "x" de probabilidad me da error , ya ponga el punto en el numerador o en el denominador, ¿A alguien se le ocurre que sucede?
no me sirve la función srand (time(NULL));
hay otra opción que se lo mismo?
talvez a esta altura no te sirva pero debes poner otra libreria #include
tengo el mismo problema pero yo ya agregué la libreta stdlib
#include
#include
hola, como seria verificar si un dato existe en un vector y mostrar su posición?
Diyar Bakir Vásquez Silva Pues para eso, tendras que pensarlo tu mismo, si te ves todos los videos de vectores se te ocurrira, ya que es realmente sencillo, pero la gracia de la programacion es pensar en como usar una herramient (C en este caso), no lo contrario.
Un saludo.
Empieza A Programar lo intenté así
#include
int main(){
int x, i, a[5]= {9,8,7,5,3};
printf ("indique la posicion del dato q desea ver: ");
scanf("%i", &x);
for(i = 0 ; i< 5; i++){
}
if(x== a[i]){
printf("el %i esta en posicion %i", x, a[i]);
}
else{
printf("%i no existe en la lista ", x);
}
system("pause");
return 0;
}
no obstante no ocurre lo que busco
Diyar Bakir Vásquez Silva amigo como estas, voy en este video aprendiendo a programar, no se si todavia tengas esta duda igual te dare mis dos posibles soluciones:
Si lo que quieres es dar una posicion del vector y saber que valor tiene, esta este programa:
#include
int main(){
int x, i, a[5]= {9,8,7,5,3};
printf ("indique la posicion del dato q desea ver: ");
scanf("%i", &x);
printf ("el numero en la posicion %i es: %i
",x,a[x]);
system("pause");
return 0;
}
y el otro ejercicio es saber si un dato existe en un vector y en que posicion esta, hice este programa:
#include
int main(){
int y, i, a[5]= {9,8,7,5,3};
printf ("introduce un numero para y: ");
scanf ("%i", &y);
for (i = 0 ; i < 5 ; i++){
//printf ("%i, ",a[i]);
if (y == a[i]){
printf ("el numero %i introducido para Y si existe y es el numero %i y esta en la posicion %i
",y,a[i],i);
}
}
system("pause");
return 0;
}
existe algun problema si opto por nunca usar los punteros?. pq en serio que no entiendo como se usan :/
en los ejemplos que salen al principio del video del vec [] = 1,2,3
me imprime solamente el 2;
en el siguiente ejemplo me imprime solamente el 8 tengo la vercion mas reciente de dev c++ con el TDM-GCC (pense que tenia que ver con el compilador) y descarge a la vercion que esta e el video con el compilador Mingw e imprime lo mismo ("guarde con nom_archivo.c")
andrew Osorio Dale al cuarto boton, el de rebuild o reconstruir todo y seguro que no habra problema. Tambien ten en cuenta que estes leyendo bien el vector.
Un saludo.
andrew Osorio lo que te pasa es que cuando debes poner printf("%i, ", *(v + i)); y en vez de eso tu le sumas uno en vez de la letra i
Pero como yo hago para disminuir la cargar del vector ?
haciendo el mismo codigo ktu me da un error, el numero generado por rand no cambia y me el 100% uno de los numeros.
Si aun sigue el error pon aqui el codigo, algo debes de tener mal.
Un saludo.
Gracias, pero ya lo sulocione. :)
Tengo un serio problema aunque creo que probablemente sea un bug de la versión ya que ami los floats desde que empece no me dan decimales, me dan los números exactos continuados de un punto y ceros ej: 17.00000 no me da decimales, a lo mejor alguien sabe como solucionarlo, gracias de antemano !
r1nx casi seguro que han sido errores de conversión por hacer operaciones con enteros y guardarlos en floats. El error no de versión sino tuyo.
que tengo mal? me salen infinitos numeros
#include
void funcion (int *vec);
void leer (int *vec);
int main () {
int vec [3];
funcion (vec);
leer (vec);
system ("Pause");
return 0;
}
void funcion (int *vec) {
int i;
for (i = 0; i < 3; i++) {
printf ("Introduce valor para la posicion %i: ", i+1);
scanf ("%i", (vec +i));
}
}
void leer (int *vec) {
int i;
for (i = 0; 1 < 3; i++) {
printf ("%i ", *(vec +1));
}
}
Te recomiendo que utilices el depurador en este tipo de casos en vez de preguntar, suele ser mucho mas rapido e instructivo.
Un saludo.
En el resultado todos me dan el mimo numero es decir que no me da la totalidad del 100%
Aca esta el codigo
#include
void sorteo(int *vec);
void leer(int *vec);
int main(){
int vec[] = {0,0,0,0,0,0};
sorteo(vec);
leer(vec);
system("pause");
return 0;
}
void sorteo(int *vec){
srand (time(NULL));
int i,aux;
for(i = 0; i < 10000; i++){
aux = rand()%6;
switch (aux){
case 0:{
*(vec+aux) +=1;
break;
}
case 1:{
*(vec+aux) +=1;
break;
}
case 2:{
*(vec+aux) +=1;
break;
}
case 3:{
*(vec+aux) +=1;
break;
}
case 4:{
*(vec+aux) +=1;
break;
}
case 5 : {
*(vec+aux) +=1;
break;
}
}
}
}
void leer(int *vec){
int i;
float x;
for (i=0; i
el uso de los punteros para no ocupar mucha memoria verdad?
con eso se optimiza el trabajo
Entre otras cosas, es para no ocupar mucha memoria, exactamente, si tienes una cosa en memoria y lo puedes usar desde varios lugares diferentes (por ejemplo varias funciones diferentes), te ahorras tenerlo de forma repetida, por lo que ahorra memoria y tiempo de volver a crearlo.
Un saludo.
no era necesario el switch (aux)con solo poner *(vec+aux) +=1; en un solo renglón era suficiente.
supongo que lo hizo para que la gente recordara el switch ya que hace muchos videos que no a puesto un ejemplo!
Hola, en el primer ejemplo que pones, a mí solamente me imprime el segundo número, lo he repasado 20 veces y he usado el depurador, y no encuentro la solución. Alguien me puede ayudar?
#include
void funcion (int *vec);
void imprimir (int *vec);
int main(){
int vec[3];
funcion (vec);
imprimir (vec);
system ("pause");
return 0;
}
void funcion (int *vec){
int i;
for (i = 0 ; i < 3 ; i++){
printf ("Introduce un valor para la posicion %i: ",i+1);
scanf ("%i", (vec+i));
}
}
void imprimir (int *vec){
int i;
for (i = 0 ; i < 3 ; i++){
printf ("%i ",*(vec+1));
}
}
En tu función de imprimir, tienes *(vec+1), en lugar de *(vec+i)
acá me perdí :(
Hola a todos. ¿Podrían ayudarme en una duda que me surgió? Mi duda es que si puedes poner el "case" en un bucle, en un switch.
Saludos, gracias.
#include
void operation (int *v, int *n);
void imprimir (int *v, int *n);
int main (){
int n;
printf ("Introduce de cuantos numeros estamos parlando y te daré la probabilidad: ");
scanf ("%i", &n);
int v [n];
operation (v, n);
imprimir (v, n);
system ("pause");
return 0;
}
void operation (int *v, int *n){
srand (time(NULL));
int i, aux, j;
for (i = 0 ; i < 10000; i++){
aux = rand ()%*n;
switch (aux){ /*AQUIII+/
for (j = 0 ; j < *n ; j++){ /*AQUIII+/
case 0 + j: { /*AQUIII+/
*(v+aux) += 1; /*AQUIII+/
break; /*AQUIII+/
}
}
}
}
}
void imprimir (int *v, int *n){
int i;
float x;
for (i = 0; i < *n ; i++){
x = (*(v)*100) / 10000;
printf ("La probabilidad de que el numero %i salga es de: %f.
",i+1, x);
}
printf ("
");
}
tienes algún tutorial de como hacer números aleatorios sin repetirse
?
+Daniel Gonzalez La unica forma que se me ocurre a mi. Es ir guardando los aleatorios en un vector. y compara si todos los elementos guardados que tiene el vector son distintos al nuevo numero generado. si es asi, que guarde. Sino que de otra vuelta.
me sale esto:
warning: implicit declaration of function 'time' [-Wimplicit-function-declaration]
error: expected ';' before numeric constant
USO CODE BLOCKS
YA ESTA me falto el #include
se me habia olvidado el twich cuando me puse a hacerlo xD
a se me olvidaba el codigo al final te pongo los mensages de error del compilador
#include
void sorteo(int *vect);
void imprimir(int *vect);
int main(void){
int vect[] = {0,0,0,0,0,0};
sorteo(vect);
imprimir(vect);
return 0;
}
void sorteo(int *vect){
srand(time(NULL));
int i, aux;
for(i = 0; i < 10000; i++){
aux = rand()%6;
switch(aux){
case 0:{*(vect+aux) += 1;break;}
case 1:{*(vect+aux) += 1;break;}
case 2:{*(vect+aux) += 1;break;}
case 3:{*(vect+aux) += 1;break;}
case 4:{*(vect+aux) += 1;break;}
case 5:{*(vect+aux) += 1;break;}
}
}
}
void imprimir(int *vect){
int j, x;
for(j = 0; j < 6; j++){
x = (*(vect+j)*100)/10000.;
printf("La probabilidad de que el numero %d salga es de %f:
", j+1, x);
}
}
ejercisio_27.c: En la función ‘sorteo’:
ejercisio_27.c:19:2: aviso: declaración implícita de la función ‘srand’ [-Wimplicit-function-declaration]
ejercisio_27.c:19:2: aviso: declaración implícita de la función ‘time’ [-Wimplicit-function-declaration]
ejercisio_27.c:23:3: aviso: declaración implícita de la función ‘rand’ [-Wimplicit-function-declaration]
ejercisio_27.c: En la función ‘imprimir’:
ejercisio_27.c:38:3: aviso: formato ‘%f’ espera un argumento de tipo ‘double’, pero el argumento 3 es de tipo ‘int’ [-Wformat]
La compilación ha terminado con éxito.
y se compila con exito XD
EL ARCADEMAN En la funcion imprimir declaraste x como entero (int), tenes que declararla como float. En el printf de imprimir pusiste %d y tenias que poner %i. La advertencia de srand no se por que es. Suerte.
ok gracias %d tambien imprime enteros no se a que se deve pero asi me lo enseñaron en un curso que hice. no se enfocaba en c pero vimos un poquito, en ese momento usaba linux y siempre use %d. si que e declarado mal x muchas gracias
Es cierto, error mio. Se puede usar %i y %d. Gracias por avisar.
Ho! no gracias ati
alguien me explica por que no funciona mi codigo?
#include
#include
#include
#include
void sorteo (int *vec);
void leer(int *vec);
int main(){
int vec[]={0,0,0,0,0,0};
sorteo(vec);
leer(vec);
printf("Hola");
system("pause");
return 0;
}
void sorteo(int *vec){
srand(time(NULL));
int i, aux;
for(i=0; i
No entendí porque hacerlo con el switch.. yo lo hice sin el.
#include
void sorteo(int *vec,int tope, int iter);
void muestravectorpointer(int *vec, int tope,int iter);
int main(){
int v[]={0,0,0,0,0,0},x=6,it=10000;
sorteo(v,x,it);
muestravectorpointer(v,x,it);
system("pause");
return 0;
}
void sorteo(int *vec,int tope, int iter){
srand(time(NULL));
int i,c,l;
for (c=1;c
Para que haces el swich si todos llevan la misma sentencia, no es inutil?
En las partes importantes de explicación y dudas acentúas mucho la s y no entiendo :,c.
me da un error aqui srand(time(NULL)); para ver cual es el error ke tengo
#include
void sorteo(int *vec);
void leer(int *vec);
int main()
{
int vec[]={0,0,0,0,0,0};
sorteo(vec);
leer(vec);
return 0;
}
void sorteo(int *vec)
{
srand(time(NULL));
int i,aux;
for(i=0;i
Lastima que no tuvo en cuenta el zoom...las letras salen muy pequeñas.
No entiendo que sentido tiene el "switch(aux)" en el procedimiento "sorteo()"....
A mi entender la estructura switch no hace falta....
+ngoeslink Eso pensé yo, pero lo intente hacer y me daba problemas así que lo he hecho sin punteros. Lo acabo de poner en un comentario por si te interesa.
+ngoeslink es verdad no hace falta, creeria yo que seria mas eficiente por que el programa no tendria que entrar en los condicionales.
+LuisG Que bonito encontrarte en un comentario de youtube jajaja. Yo no usé el switch ni en notación puntero ni en vector y me iba de perlas
Tengo una duda técnica, ¿porque hacemos todo el rato (vec+1) si el direccionamiento es a nivel de byte y un "integer" son 2 bytes (16 bits)? si haces +1 te vas al siguiente byte que no coincide con el principio del siguiente entero. (Esto si ocurre con los "char" ya que ocupan 1 byte cada carácter en memoria)
Porque el puntero sabe a que tipo de dato esta apuntando, por lo cual al sumarle 1 se mueve a la siguiente direccion teniendo en cuenta el tipo de dato del puntero
Estoy volando en esta webada de punteros, alguien podría decirme porque no funciona mi programa, se los agradecería.
#include
void puntero (int *vec);
void ayuda (int *vec);
int main (){
int vec[3];
puntero(vec);
ayuda(vec);
system ("pause");
return 0;
}
void puntero (int *vec){
int i;
for (i=0; i
+Edkaem te falta la librería stdlib
+Luis Gascón Disculpa pero como llamo a esa librería que dices ?
#include
te recomiendo leer más sobre las librerías
+Edkaem En el void puntero, en el scanf a vec no se le suma 1, sino i.
No enseñaste para que servía el switch, y ahora lo usas, la verdad es que me perdí en casi todo el problema, haberlo de nuevo nomas.
+Edkaem Enseñe para que sirve el switch en el bloque 2. Por favor, tienes que verte todos los vídeos antes de comentar que no lo entiendes.
Un saludo.
+Empieza A Programar Lo veré inmediatamente :D, disculpa por la molestia.
No te preocupes, en este vídeo el switch sirve para nada... : )
los punteros no se declaran ? no entendi una mierda :C
+jonathan quiñonez si se declaran
les agregue esas librerias y ahora me da error en todos los casos alguien que me eche una manito..
#include
#include
#include
void sorteo(int *vec);
void leer(int *vec);
int main()
{
int vec[]={0,0,0,0,0,0};
sorteo(vec);
leer(vec);
return 0;
}
void sorteo(int *vec)
{
srand(time(NULL));
int i,aux;
for(i=0;i
cambia la libreria #include por #include suerte!
yo puse de esta manera pero no me compila podrias ver el error y corregirlo ?
#include
void sorteo (int *vec){
void leer (int *vec){
int main (){
int vec []={0,0,0,0,0,0};
sorteo(vec);
leer(vec);
system ("pause");
return 0;
}
void sorteo (int *vec){
srand(time(NULL));
int i,aux;
for (i=0; i
#include
#include
#include
#include
void sorteo (int *vec);
void leer (int *vec);
int main (){
int vec[6];
vec[0]=0;
vec[1]=0;
vec[2]=0;
vec[3]=0;
vec[4]=0;
vec[5]=0;
sorteo(vec);
leer(vec);
system ("pause");
return 0;
}
void sorteo (int *vec){
srand(time(NULL));
int i,aux;
for (i=0;i
despues del numero de cada CASE, va dos puntos no punto y coma, ej: case 1:
amigo tu explicacion no estuvo muy acertada por ejemplo nunca explicastes xq pones 0s en las 6 posiciones o por que cuando se le suma 1 a los valores de *(vec+aux) da como resultado un numero determinado cuando en la variable del vector cuando la declarastes pusistes puros 0 eres un exlente profesor la mayoria de tus videos los e entendido pero no des por hecho que los que ven los videos los entienden porfavor habemos personas q estamos comenzando y queremos aprender
+Carlos Santaella "habemos" creo que te equivocas de palabra
+Carlos Santaella yo estoy empezando a aprender y eso que dices que no explica, si lo hace y a mi parecer se entiende todo a la perfección.
mmmm entiendo, ya yo no estoy en ese nivel pero sigue aprendiendo (y)
+Carlos Santaella creo que es sentido comun 0 es el numero inicial y le sumas 1 cada vez
Ni la ortografía.
¡Excelente!