|
41
|
Programación / Programación C/C++ / Re: Una duda con el almacenamiendo en c...
|
en: 11 Abril 2015, 17:54 pm
|
Eso sucede porque en el bloque de memoria almacenas los valores leídos con scanf de tipo int, para que las demás funciones tengan el comportamiento esperado las debes modificar en la misma linea: se recibe un puntero de tipo "int *" y se procesan los elementos del bloque como enteros.
Un saludo
|
|
|
42
|
Programación / Programación C/C++ / Re: letras iniciales de una oracion en mayuscula
|
en: 11 Abril 2015, 17:42 pm
|
Yo quiero un metodo mas general.....con mas espacios en blanco Lo primero que debes hacer es enfocarte en la biblioteca estándar de C++ evitando el uso de funciones como gets, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|. En cuanto al programa basta con utilizar una bandera de estado la cual pones a uno (o true) al encontrar un carácter parte de una palabra y cero (o false) cuando este sea un separador. Justo cuando la pones a uno cambias el carácter a mayúsculas (casi lo mismo que uno de los ejemplos de K&R). Para darte una idea un programa en C con esa aproximación es: #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(void) { char cad[] = "una cadena de prueba con multiples espacios"; int st; int i; st = 0; for (i = 0; cad[i] != '\0'; i++) st = 0; else if (st == 0){ st = 1; } return EXIT_SUCCESS; }
Toma la idea y adecuala a C++. Por ejemplo puedes empezar evitando el array utilizando en su lugar un objeto de la clase string y para leer la linea y almacenarla en ella utilizas la función getline. Un saludo
|
|
|
43
|
Programación / Programación C/C++ / Re: Una duda con el almacenamiendo en c...
|
en: 11 Abril 2015, 17:16 pm
|
Para empezar en la función "LeeVector" falta el valor de retorno y no puedes retornar el array "v1" ya que es local a esa función, cuando esta termina el array se destruye. Por ultimo indicas que el valor de retorno de la función es "float *" cuando los elementos del array son de tipo int. En su lugar debes reservar un bloque de memoria mediante la función malloc usando la dirección de este como valor de retorno de la función. Mas o menos así: #include <stdio.h> #include <stdlib.h> int *LeeVector(int n) { int *p; int i; if ((p = malloc(n * sizeof *p )) != NULL ) for (i = 0; i < n; i++){ printf("Dame el %d numero del vector: ", i + 1); } return p; } /* ... */ int main(void) { int n; int *p; puts("Intruduce el tamano del vector:"); p = LeeVector(n); /* Uso del bloque apuntado por p */ return EXIT_SUCCESS; }
Un saludo
|
|
|
44
|
Programación / Programación C/C++ / Re: [C] Comparar 2 cadenas sin usar <string.h>
|
en: 9 Abril 2015, 04:10 am
|
Me piden que compare dos cadenas sin usar <string.h>, y que si son iguales de un 0, si la primera cadena es mayor que la segunda de un 1, y viceversa de un -1 Dos comentarios: * En la condición del bucle si los caracteres son iguales no es necesario verificar que ambos sean diferentes de '\0', basta con comparar solo uno (el que sea). * Para retornar 1, 0 o -1 dependiendo si la primera cadena es mayor, igual o menor que la segunda basta con utilizar los operadores relaciones ">" y "<", de esta forma: return (s1[i] > s2[i]) - (s1[i] < s2[i]);
Un saludo
|
|
|
45
|
Programación / Programación C/C++ / Re: [?][C] Separando una cadena alfanumerica
|
en: 8 Abril 2015, 07:32 am
|
Si la primera parte de la cédula es un solo carácter lo puedes almacenar utilizando una variable del mismo tipo: struct ALGO { char N; int dato; }; /* ... */ printf("Cedula (X - XXXXXXXX): "); sscanf(d , " %c - %d", &nuevo ->N , &nuevo ->dato );
Si por alguna razón no es posible y se debe leer como una cadena de un solo carácter puedes indicar el numero máximo de caracteres a leer con: printf("Cedula (X - XXXXXXXX): "); sscanf(d , "%1s - %d", &nuevo ->N , &nuevo ->dato );
Si no funciona por favor indícalo y publica si es posible el código fuente completo. Un saludo
|
|
|
46
|
Programación / Programación C/C++ / Re: El "sizeof" para saber el tamaño del arreglo no me funciona
|
en: 5 Abril 2015, 04:33 am
|
El uso de lai (local, arreglo, integer) o de li (local, integer) es algo obligatorio requerido por el profesor de mi universidad. Segun el, ayuda al entendimiento del programa al ver las variables. Si es obligatorio solo queda la resignación pero aun así no es una buena idea, dos razones en contra son: 1) Un compilador decente emitirá un mensaje de error si tratas de utilizar una variable local fuera de su ámbito. 2) Como ya te diste cuenta (experiencia propia) los arrays usualmente no son procesados como tales, en su lugar se utiliza un puntero a su primer elemento. Entonces, size_t, es utilizado solamente para guardar un numero entero sin signo y el numero es dado por sizeof, correcto?. Habría alguna diferencia si utilizo size_t ó int, tendría algun efecto diferente?.
[...]
Los dos, suponiendo que el INT es positivo, al ser utilizado en un FOR, no tendría diferencia o sí?. Cuando el tamaño del objeto (en el caso de los arrays su numero de elementos multiplicado por el tamaño del tipo de estos) es pequeño no hay diferencia ni problema alguno, sin embargo el único tipo que garantiza la capacidad para almacenar el tamaño de cualquier objeto es size_t. Un saludo
|
|
|
47
|
Programación / Programación C/C++ / Re: Sistema bancario (cajero automático) [C++] [CMD]
|
en: 5 Abril 2015, 03:17 am
|
Los problemas se generan por el tipo de retorno de tolower, como este es int se imprime como tal. Para que se imprima el carácter correspondiente puedes utilizar: #include <iostream> using std::cout; using std::endl; #include <cctype> using std::tolower; int main() { char str[] = "PRUEBA"; std::cout << str << std::endl; for (int i = 0; str[i]; i++) std::cout << char(tolower(str[i])); cout << endl; return 0; }
Un saludo
|
|
|
48
|
Programación / Programación C/C++ / Re: El "sizeof" para saber el tamaño del arreglo no me funciona
|
en: 4 Abril 2015, 18:28 pm
|
Es correcto pero hay tres detalles: 1) Utilizas "laiArreglo" cuando debería ser "Arreglo". 2) Coméntale a tu profesor que prefijos como "lai" son, para ser amables, malos e innecesarios. 3) El tipo del segundo parámetro de la función debe ser size_t. De esta forma: int Arreglo[] = {1,2,5,6,2,4}; Funcion(Arreglo, sizeof Arreglo / sizeof(int)); void Funcion (int Arreglo[], size_t TamanoArreglo) { /* ... */ }
Un saludo
|
|
|
50
|
Programación / Programación C/C++ / Re: El "sizeof" para saber el tamaño del arreglo no me funciona
|
en: 4 Abril 2015, 16:40 pm
|
Como ya te comente no puedes (mas bien no deberías) utilizar el operador sizeof para obtener el tamaño de un array declarado en otra función ya que no obtendrás el valor esperado. En su lugar lo que debes hacer es modificar la función para que reciba como un segundo argumento el numero de elementos, de esta forma: #include <stdio.h> #include <stdlib.h> void imprimir(int num[], size_t num_elem); int main(void) { int num[] = {5,8,2,3,1,4,6,9,2,10}; imprimir(num, sizeof num / sizeof num[0]); return EXIT_SUCCESS; } void imprimir(int num[], size_t num_elem) { size_t i; for (i = 0; i < num_elem; i++) }
Un saludo
|
|
|
|
|
|
|