|
81
|
Programación / Programación C/C++ / Cuando utilizar signed y cuando unsigned (lenguaje C)
|
en: 17 Agosto 2014, 15:58 pm
|
Hola a todos.-
Bueno simplemente eso, no me queda muy claro si es simplemente para obtener un número mayor o tiene otro significado, recuerdo que en una oportunidad(en este foro) me daba un error por declarar una variable como unsigned, no puedo encontrar el post, por lo tanto hago esta consulta a Uds. que seguramente con tanta práctica y sapiencia me lo podrán aclarar.-
Saludos. Daniel
|
|
|
82
|
Programación / Programación C/C++ / Matriz con puntos de silla (lenguaje C)
|
en: 12 Agosto 2014, 19:54 pm
|
Hola gente. Tengo un error con la validación de datos en este programa y por más que práctico no logro dar con la tecla.- Debo reconocer que puedo estar cometiendo un error que ya debería resolver por mi mismo pero me pase 2 días de 8 horas cada uno para hacer que funcionara la matriz de punto de silla y cuando lo logré (bueno creo que lo logré porque lo corrí más de 50 veces y nunca me sale la tabla con la coincidencia) me aparece este error que deseo que me ayuden a resolver porque quiero dejar perfectamente establecida la forma correcta de utilizar fgets.- /* Se dice que una matriz tiene un punto de silla si alguna posición de la matriz es el menor valor de su fila, y a la vez el mayor de su columna.- */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include <ctype.h> #define MAX_VECTOR 2 #define MAX_F_C 10 void verificaFil(int *intFil); void verificaCol(int *intFil); void ingreso(int matriz[], int intFil, int intCol); void puntoDeSilla(int matriz[], int intFil, int intCol); int main(void){ int intFil=0, intCol=0, *matriz=NULL; printf("\n\n ===== El programa le mostrara los puntos de silla (si los hay) =====\n\n"); verificaFil(&intFil); verificaCol(&intCol); matriz = malloc(intFil * intCol * sizeof(int)); ingreso(matriz, intFil, intCol); puntoDeSilla(matriz, intFil, intCol); return 0; } void verificaFil(int *intFil){ char charFil[MAX_F_C+1]={'\0'}, *p=NULL; unsigned int ch=0, i=0, ok=0; do{ printf(" Ingrese un entero para establecer la cantidad de filas (m%cximo %d)......:", 160,MAX_F_C ); fgets(charFil , MAX_F_C , stdin ); if((p =strchr(charFil , '\n'))!=0){ *p='\0'; } else{ while((ch = getchar()) !='\n' && ch !=EOF ); } ok=0; for(; charFil[i]; i++){ ok++; } } if(ok==0){ (*intFil == 0 || *intFil > MAX_F_C) ? ok=1 : ok; } }while(ok !=0); } void verificaCol(int *intCol){ char charCol[MAX_F_C+1]={'\0'}, *p=NULL; unsigned int ch=0, i=0, ok=0; do{ printf(" Ingrese un entero para establecer la cantidad de columnas (m%cximo %d)...:", 160,MAX_F_C ); fgets(charCol , MAX_F_C , stdin ); if((p =strchr(charCol , '\n'))!=0){ *p='\0'; } else{ while((ch = getchar()) !='\n' && ch !=EOF ); } ok=0; for(; charCol[i]; i++){ ok++; } } if(ok==0){ (*intCol == 0 || *intCol > MAX_F_C) ? ok=1 : ok; } }while(ok !=0); } void ingreso(int matriz[], int intFil, int intCol){ unsigned int hora = time(NULL ), i =0, j =0, indice =0; for(; i < intFil; i++){ for(j=0; j < intCol; j++){ indice = i * intCol + j; matriz [indice ] = rand ()% 100; } } for(i=0; i<intFil; i++){ for(j=0; j<intCol; j++){ indice = i * intCol + j; printf(" %3d", matriz [indice ]); } } } void puntoDeSilla(int matriz[], int intFil, int intCol){ int i, j, elMenor=0, colMen=0, indice=0, noPds; for(i = 0; i < intFil; i++){ noPds = 0; indice = intCol * i; elMenor=matriz[indice]; colMen = indice-(intCol*i); for(j=0; j < intCol; j++){ if(matriz[indice] < elMenor){ elMenor = matriz[indice]; colMen = indice-(intCol*i); } indice++; } for(j=0; j < intFil; j++){ indice = j * intCol + colMen; if(matriz[indice] > elMenor){ noPds++; } } if(noPds == 0) printf("\n en la fila %d columna %d hay punto de silla", i , colMen ); } }
Uno de los ingresos incorrectos: Ingreso…: -4 (incorrecto) Ingreso…: aa (incorrecto) Ingreso…: 11 (incorrecto) Ingreso…: -4 (correcto) Bueno espero que me puedan ayudar y no vacilen en cambiar todo lo que deseen cambiar de mi código, es así como puedo aprender cosas que no están en los manuales.- Saludos y un gran abrazo Daniel.
|
|
|
83
|
Programación / Programación C/C++ / Sustituir cada palabra de 4 letras con asteriscos(lenguaje c)
|
en: 5 Agosto 2014, 19:35 pm
|
Hola a todos. Me pase con este tema unas cuantas horas y hasta aquí llegue, espero que me puedan ayudar a resolverlo.- En primer lugar les pongo el enunciado. Lo que llevo hecho es lo siguiente. #include <stdio.h> #include <string.h> int main(void){ char tempFrase[] = "La casa de Juan es de color azul", *token, frase[32]; int ocurrencias=0; token = strtok(tempFrase ," "); while (token != NULL){ printf("\n En la direccion %p se encuentra la palabra...: %s\n", token ,token ); (strlen(token ) == 4) ? ocurrencias ++ : ocurrencias ; } printf("\n La frase \"%s\" contiene %d palabras de 4 letras\n\n", frase , ocurrencias ); return 0; } /* #include <stdio.h> #include <string.h> #define MAX_FRASES 5 #define MAX_LONGITUD 30 void verificaIngreso(char frases[][MAX_LONGITUD], int i); int main(void){ char frases[MAX_FRASES][MAX_LONGITUD]; int i=0, j=0, ocurrencias=0, com=0, fin=0; for(; i<MAX_FRASES; i++){ printf("\n Ingrece frase[%d]...:", i+1); fgets(frases[i], MAX_LONGITUD, stdin); verificaIngreso(frases, i); } for(i=0; i<MAX_FRASES; i++){ printf("\n La frase[%d] tiene una longitud de %d caracteres", i+1, strlen(frases[i])); } for(i=0; i<MAX_FRASES; i++){ for(j=0; frases[i][j]; j++){ if(frases[i][j] == 32) com = frases[j] } } printf("\n %d", espacios); printf("\n\n"); return 0; } void verificaIngreso(char frases[][MAX_LONGITUD], int i){ char *p=NULL; unsigned int ch=0; if((p=strchr(frases[i], '\n'))!=0){ *p='\0'; } else{ while((ch = getchar()) !='\n' && ch!=EOF); } }*/
Lo que no puedo saber es ¿Qué referencia debo utilizar para acceder a la variable frase y sustituir todas las palabras de 4 letras con asteriscos ?.- Saludos y desde ya muchas gracias por el tiempo.- Daniel
|
|
|
85
|
Programación / Programación C/C++ / Prioridad y asociatividad de los operadores en C. (Programa propio)
|
en: 6 Abril 2014, 21:16 pm
|
Hola a todos y que tengan un muy buen día.- Por el enunciado se darán cuenta de lo que deseo hacer, si me dejan ser prejuicio muchos dirán que ganas de complicarse por algo que el compilador de C lo efectúa perfectamente, si bien esto es cierto tengo mucha fe que este hilo me proporcionara mucho conocimiento (intuición, corazonada).- Lo primero que deseo hacer es poner en una variable int (9 - 2) y borrarlo de la variable cadena, si bien logro extraer la cadena con un inicio correcto pero no logro el corte en el último paréntesis.- Por último ¿lo harian de otra manera?.- #include <stdio.h> #include <string.h> int main(){ char cadena[100] = "3 * 5 + (9 - 2) + 5", *enc = NULL; return 0; }
Saludos y desde ya muchas gracias. Daniel
|
|
|
86
|
Programación / Programación C/C++ / Operadores, Prioridad y asociatividad en lenguaje C.
|
en: 4 Abril 2014, 02:55 am
|
Hola a todos y que tengan un muy buen día.- En este caso estoy estudiando operadores, Prioridad y asociatividad y realmente estoy trabado, en el programa, la segunda sentencia logro establecer qué el resultado sea 119 (creo estar en lo correcto).- #include <stdio.h> int main(){ int a = 3 + 4 *(8 * (4 - ( 9 + 3) /6)); //67 int b = 4 * 3 * 5 + 8 * 4 * 2 - 5; //119 printf("\n El resultado de 3 + 4 *(8 * (4 - ( 9 + 3) /6)) es...: %d", a ); printf("\n\n El resultado de 4 * 3 * 5 + 8 * 4 * 2 - 5 es........: %d", b ); return 0; }
4 * 3 * 5 + 8 * 4 * 2 - 5
4 * 3 = 12 12 * 5 = 60
8 * 4 = 32 32 * 2 = 64
64 + 60 = 124
124 – 5 = 119
Pero la primera ni hay logro plasmar los pasos, bueno espero como siempre que me ayuden a descifrar el enigma que me tiene bastante ocupado.- Por otro lado, quisiera saber si les parece muy difícil hacer un programa para emular el compilador, o sea, mostrar paso a paso la fórmula para llegar al resultado final, alguien lo hizo alguna vez.- Saludos. Daniel
|
|
|
87
|
Programación / Programación C/C++ / Descomponer un numero entero en lenguaje C.
|
en: 31 Marzo 2014, 16:00 pm
|
Hola a todos y que tengan un muy buen dia. Lenguaje………………....: “C” Sistema operativo……: Windows XP Compilador……………...: MinGW Problema………………...: No puedo concluir el programa porque no logro mover asía la izquierda los dígitos restantes e insertar el ‘\0’.- Error………………………...: Ninguno. Otras Observaciones: Para todo aquellos que tengan mucho tiempo, me podrían indicar que debo cambiar para obtimizarlo . Código……………………..:#include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> int verifica(char ingreso[], int ok, int longitud, int maxDescartar); int main(){ unsigned int descartar=0, numeroFinal=0, i=0, ok=0, longitud=11; char digitos[12] = {'\0'}, cualDescartar[2] = {'\0'}; printf("\n ---------- Programa que descompone un numero entero sin signo ----------"); do{ ok=0; printf("\n\n Ingrece un numero entero sin signo [minimo 100 maximo %u].........: ", UINT_MAX ); fgets(digitos , longitud , stdin ); ok = verifica(digitos, ok, longitud, i); }while(ok); for(; digitos[i] != NULL; i++){ printf(" [%d] = %c \n", i , digitos [i ]); } do{ longitud=2; ok=0; printf("\n\n Indique con un entero sin signo del [0] al [%d] que numero desea descartar..: ", i -1); fgets(cualDescartar , longitud , stdin ); ok = verifica(cualDescartar, ok, longitud, i); }while(ok); descartar = atoi(cualDescartar ); //En este lugar va lo que me falta... return 0; } int verifica(char ingreso[], int ok, int longitud, int maxDescartar){ long long temp=0, auxiliar=0; int ch=0, i=0, ingresoInt=0; char *p=NULL; if((p =strchr(ingreso , '\n'))){ *p='\0'; } else{ ingreso[longitud] = '\0'; while((ch = getchar()) !='\n' && ch !=EOF ); } for(; ingreso[i] != NULL; i++){ if(ingreso[i] <= 47 || ingreso[i] >= 58){ ok=1; return ok; } } if(longitud == 11){ for(i=0; ingreso[i] != NULL; i++){ auxiliar = ingreso[i] - 48; temp=10*temp+auxiliar; } if(temp <= 99 || temp > UINT_MAX){ ok=1; return ok; } } else{ ingresoInt = atoi(ingreso ); if(ingresoInt > maxDescartar){ ok=1; return ok; } } return ok; } /* sprintf(digitos, "%d", 56789); */
Saludos y muchas pero muchas gracias por el tiempo dedicado a este tema.- Daniel
|
|
|
89
|
Programación / Programación C/C++ / Operadores a nivel de bits (lenguaje C).
|
en: 16 Marzo 2014, 02:48 am
|
Hola a todos. Estoy estudiando “Operadores a nivel de bits” y no sólo deseo aprender la sintaxis sino también interpretar lo que hace cada línea de código.- Lenguaje: “C” Problema: (dudas) Expuesta en el código. Error: Ninguno. Otras Observaciones: Ninguna. Código:# include <stdio.h> void despriegaBits(unsigned valor); int main(void){ unsigned x; //No entiendo esta declaracion de variable, cual es el tipo? printf("\n\n Introduzca un entero sin signo....:"); despriegaBits(x); return 0; } void despriegaBits(unsigned valor){ unsigned c; //No entiendo esta declaracion de variable, cual es el tipo? unsigned despliegaMascara = 1 << 31; //Esta sentencia como se llama?, pareceria una funcion, pero no //tiene parentesis, me desconcierta, y lo mas importante, como funciona?, que hace?. for(c = 1; c <= 32; c++){ putchar(valor & despliegaMascara ? '1' : '0'); valor <<= 1; if(c % 8 == 0){ } } }
Desde ya muchas gracias por la ayuda que puedan brindarnos.- Saludos. Daniel
|
|
|
90
|
Programación / Programación C/C++ / Pasar a función array de punteros.-
|
en: 20 Enero 2014, 02:36 am
|
Hola. rir3760 si en algún post no respondo a tus ayudas es porque me lleva tiempo asimilarlas.- Voy al grano, sigo con mis prácticas de punteros y el programa que estoy haciendo es para que el operador ingrese por ejemplo 8 nombres y luego ordenarlos.- Hay 2 cosas que no sé hacer, la primera, alguien me podría decir como pasar un array de punteros a función y la segunda, ¿como puedo hacer para que la cantidad de punteros se pida que se ingrese por teclado y no ponerlo a mano?.- printf("\n Ingrese un entero para establecer la cantidad de nombres a ordenar...:");
Aclaro que el programita es para poner algo sino me van a tirar de las orejas.- Otra cosita, la validación de ingreso de entero la copié de un post de rir3760, ya la adopte como definitiva, funciona a la perfección.- #include <stdio.h> #include <stdlib.h> void ingresoCorrecto(int*, int); int main(void){ char *ptrNombres[] = {"Rosita", "Alberto", "Claudio", "Yanina", "Pedrito", "Jorge", "Daniel", "Leo"}; int indice=0, longitud=0; longitud = sizeof ptrNombres / sizeof *ptrNombres; for(indice=0; indice<longitud; indice++){ printf("[%d] %s - ", indice , ptrNombres [indice ]); } ingresoCorrecto(&indice,longitud); printf("\n Su eleccion fue...: %s", ptrNombres [indice ]); return 0; } void ingresoCorrecto(int *ingreso, int longitud){ int ch=0, ok=0, temp=0; do{ printf("\n\n ingrese un entero del [0] al [%d] para extraer un nombre..:", longitud -1); ok = scanf("%d", &temp ) == 1 && temp >= 0 && temp <= longitud -1; while ((ch = getchar()) != EOF && ch != '\n'); }while(!ok); *ingreso = temp; }
Saludos.
|
|
|
|
|
|
|