|
Mostrar Mensajes
|
Páginas: [1] 2
|
2
|
Programación / Programación C/C++ / Re: Problema con uso del incremento de una variable.
|
en: 30 Abril 2018, 14:17 pm
|
Mmm, no me ha quedado muy claro..., soy nuevo. /* https://en.wikipedia.org/wiki/Sequence_point Los puntos de secuencia también entran en juego cuando la misma variable se modifica más de una vez en una sola expresión. Un ejemplo frecuentemente citado es la expresión C i=i++ , que aparentemente le asigna a i su valor anterior e incrementa i . El valor final de i es ambiguo, ya que, dependiendo del orden de evaluación de la expresión, el incremento puede ocurrir antes, después o intercalado con la asignación. La definición de un idioma particular puede especificar uno de los comportamientos posibles o simplemente decir que el comportamiento no está definido . En C y C ++, la evaluación de dicha expresión produce un comportamiento indefinido. [4] Otros lenguajes, como C # , pueden definir la precedencia de la asignación e incrementar el operador de tal forma que se garantice el resultado de la expresión i=i++. */ #include <stdio.h> #include <stdlib.h> int main() { /*Puntos de secuencia en diferentes expresiones*/ int i=0; printf("Reiniciamos i = 0\n\n"); i=0; /*Puntos de secuencia en una misma expresion*/ printf(" i = %d\n++i = %d\n i++ = %d\n++i = %d\n i++ = %d\n++i = %d\n i++ = %d\n++i = %d\n i++ = %d\n++i = %d\n i++ = %d\n i = %d\n\n",i ,++i ,i ++,++i ,i ++,++i ,i ++,++i ,i ++,++i ,i ++,i ); return 0; }
Resultados: i = 0 ++i = 1 i++ = 1 ++i = 3 i++ = 3 ++i = 5 i++ = 5 ++i = 7 i++ = 7 ++i = 9 i++ = 9 i = 10
Reiniciamos i = 0
i = 10 ++i = 10 i++ = 8 ++i = 10 i++ = 6 ++i = 10 i++ = 4 ++i = 10 i++ = 2 ++i = 10 i++ = 0 i = 10
-------------------------------- Process exited after 0.02101 seconds with return value 0 Presione una tecla para continuar . . .
En la primera lista de números se ve un comportamiento esperado en los operadores de incremento.... ¿Porque están cada uno en una expresión (printf) única para cada uno; aunque todos hagan referencia a la misma variable? En la segunda lista de números se observa un comportamiento inesperado y parece errático; pero sin embargo, se puede apreciar una progresión descendente: 10, 8, 6, 4, 2, 0. Frente a otra progresión permanente de 10. En definitiva; aunque muestre una especie de patrón. ¿Hay que considerarlo errático y ambiguo? ya que todas las evaluaciones a la misma variable se efectuan en la misma expresión (printf) y... ¿es algo que se debe de evitar?
|
|
|
4
|
Programación / Programación C/C++ / C - Tipos de datos - Flotantes - Adquirir rango de valores para flotantes
|
en: 28 Abril 2018, 04:41 am
|
Pues, he creado el siguiente código con la biblioteca limits.h; pero esta no tiene macros para saber el valor MAX y MIN de los tipos flotantes. ¿Alguien sabe de alguna otra biblioteca que me diese macros para terminar este sencillo programa? Y segunda pregunta: ¿alguien sabe si compilo la línea 10 y 11 porque me sale un error en el DEVC++? No lo entiendo. #include <stdio.h> #include <limits.h> int main() { printf("Numero de bits que tiene un tipo CHAR = %i\n\n", CHAR_BIT ); /* No funcionan ¿Por qué? printf("Numero de bits que tiene un tipo INT = %i\n\n", WORD_BIT); printf("Numero de bits que tiene un tipo LONG = %i\n\n", LONG_BIT); */ //------------------------------------------------------------------------------------- printf("El valor minimo de CHAR = %i\n", CHAR_MIN ); printf("El valor maximo de CHAR = %i\n\n", CHAR_MAX ); printf("El valor minimo de SIGNED CHAR = %i\n", SCHAR_MIN ); printf("El valor maximo de SIGNED CHAR = %i\n\n", SCHAR_MAX ); printf("El valor minimo de UNSIGNED CHAR = 0\n"); printf("El valor maximo de UNSIGNED CHAR = %u\n\n", UCHAR_MAX ); //------------------------------------------------------------------------------------- printf("El valor minimo de SHORT INT = %i\n", SHRT_MIN ); printf("El valor maximo de SHORT INT = %i\n\n", SHRT_MAX ); printf("El valor minimo de UNSIGNED SHORT INT = 0\n"); printf("El valor maximo de UNSIGNED SHORT INT = %u\n\n", USHRT_MAX ); printf("El valor minimo de INT = %i\n", INT_MIN ); printf("El valor maximo de INT = %i\n\n", INT_MAX ); printf("El valor minimo de UNSIGNED INT = 0\n"); printf("El valor maximo de UNSIGNED INT = %u\n\n", UINT_MAX ); //------------------------------------------------------------------------------------- printf("El valor minimo de LONG = %li\n", LONG_MIN ); printf("El valor maximo de LONG = %li\n\n", LONG_MAX ); printf("El valor minimo de UNSIGNED LONG = 0\n"); printf("El valor maximo de UNSIGNED LONG = %lu\n\n", ULONG_MAX ); printf("El valor minimo de LONG LONG = %lli\n", LLONG_MIN ); printf("El valor maximo de LONG LONG = %lli\n\n", LLONG_MAX ); printf("El valor minimo de UNSIGNED LONG LONG = 0\n"); printf("El valor maximo de UNSIGNED LONG LONG = %llu\n\n", ULLONG_MAX ); //------------------------------------------------------------------------------------- // Faltan los rangos de valores para los float, double y long double, además de sus formateadores. return(0); } /* Estos Valores y formateadores los he ido recopilando y testeando, algunos no me han funcionado como el %Li. Valores de tipos de datos según compilador y sistema operativo (16, 32 o 64bits). ================================================================================ signed char -> tipo caracter con signo -> %c | Tamaño = 1byte | Rango = -128...127 | char -> tipo caracter con signo -> %c | Tamaño = 1byte | Rango = -128...127 | Ejemplo: char a='e'; unsigned char -> tipo caracter sin signo -> %c | Tamaño = 1byte | Rango = 0...255 | short -> tipo entero corto con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 | Ejemplo: short b=-15; int -> tipo entero normal con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 | Ejemplo: int c=1024; unsigned int -> tipo entero normal sin signo -> %u | Tamaño = 2bytes | Rango = 0...65535 | Ejemplo: unsigned int d=50456; signed int -> tipo entero normal con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 | short int -> tipo entero corto con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 | unsigned short int -> tipo entero corto sin signo -> %u | Tamaño = 2bytes | Rango = 0...65535 | signed short int -> tipo entero corto con signo -> %i | Tamaño = 2bytes | Rango = -32768...32767 | long int -> tipo entero largo con signo -> %li | Tamaño = 4bytes | Rango = -2147483648...2147483637 | signed long int -> tipo entero largo con signo -> %li | Tamaño = 4bytes | Rango = -2147483648...2147483637 | unsigned long int -> tipo entero largo sin signo -> %li | Tamaño = 4bytes | Rango = 0...4294967295 | long -> tipo entero largo con signo -> %li | Tamaño = 4bytes | Rango = -2147483648...2147483637 | Ejemplo: long e=123456; unsigned long -> tipo entero largo sin signo -> %li | Tamaño = 4bytes | Rango = 0...4294967295 | float -> tipo real normal -> %f | Tamaño = 4bytes | Rango = 3.4*E-38...3.4*E38 | Ejemplo: float a=15.678; double -> tipo real largo -> %lf | Tamaño = 8bytes | Rango = 1.7*E-308...1.7*E308 | Ejemplo: float a=15.678; long double -> tipo real muy largo -> %Lf | Tamaño = 8bytes o 10bytes | Rango = 1.7*E-308...1.7*E308 o 3.4*E-4932...3.4*E4932 | Ejemplo: float a=15.678; ¿Cómo saturar el valor de las variables? Formateadores (Wikipedia: https://es.wikipedia.org/wiki/Printf) =============================================================== %d ó %i entero en base 10 con signo (int) %u entero en base 10 sin signo (int) %o entero en base 8 sin signo (int) %x entero en base 16, letras en minúscula (int) %X entero en base 16, letras en mayúscula (int) %li ó %ld ? %lu %lli %llu %Li ? %f Coma flotante decimal de precisión simple (float) %lf Coma flotante decimal de precisión doble (double) %e La notación científica (mantisa / exponente), minúsculas (decimal precisión simple ó doble) %E La notación científica (mantisa / exponente), mayúsculas (decimal precisión simple ó doble) %c caracter (char) %s cadena de caracteres (string) %07i justificado a la derecha, 7 dígitos de largo, sin relleno %.7i largo mínimo de 7 dígitos, justificado a la derecha, rellena con ceros %8.2f tamaño total de 8 dígitos, con dos decimales %.*f”',x,d) tamaño predeterminado,x numeros decimales %*.*f”,x,y,d) tamaño igual a x, y numeros decimales %s cadena terminada en null %5s primeros cinco caracteres o delimitador %.5s primeros cinco caracteres, sin tener en cuenta el delimitador %20.5s primeros cinco caracteres, justificados a la derecha, con 20 caracteres de largo %-20.5s primeros cinco caracteres, justificados a la izquierda, con 20 caracteres de largo */
|
|
|
7
|
Programación / Programación C/C++ / Re: Ayuda con sintaxis For
|
en: 26 Abril 2018, 00:37 am
|
Yo tb soy nuevo en esto. Por lo poco que sé el for se utiliza para recorrer intervalos usando ciclos, de 0 a n (ascendente), o de n a 0 (descendente). Estos intervalos se pueden recorrer de ciclo a ciclo con i++ o i-- o la progresión que le quieras poner(x+=2 para ir saltando de dos en dos por ejemplo), sea ascendente o descendente según el propósito que le quieras dar. Por ejemplo de 0 a n (ascendente) sería así, siendo n=5: ... for (int i=0;i<=5;i++) {printf("Ciclo %i\n",i); ... Imprimiría 5 ciclos empezando desde cero: ... Ciclo 0 Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 ... 3 a n (descendente) sería así, siendo n=-5: ... for (int i=3;i>=-5;i--) {printf("Ciclo %i\n",i); ... Imprimiría 8 ciclos empezando desde 3: ... Ciclo 3 Ciclo 2 Ciclo 1 Ciclo 0 Ciclo -1 Ciclo -2 Ciclo -3 Ciclo -4 ... Para el uso de vectores se usa un for desde 0 (principio del vector) hasta n (final del vector). Para el uso de matrices se usan dos for anidados. Uno usa i para recorrer el intervalo de las filas (primera dimension (un simple vector)) y el otro usa j para recorrer el intervalo de las columnas (segunda dimensión). te aconsejo ver este curso en youtube: https://www.youtube.com/watch?v=hZXFl4n6854&list=PLWtYZ2ejMVJmUTNE2QVaCd1y_6GslOeZ6&index=33Ánimo, no desesperes y si ves que algo se te olvida anótalo en una libreta.
|
|
|
8
|
Informática / Hardware / Ergonomía en la Informática
|
en: 28 Enero 2018, 14:02 pm
|
Me estoy dando cuenta que al pasar muchas horas en frente del ordenador la vista puede resultar fatigada, sino dañada, a la larga. ¿Tomáis alguna medida para esto? ¿Como algún protector en pantalla o gafas especiales?
Aparte, de aprender mecanografía, al principio iba bien, hay días en que se me agarrotan un poco los músculos del antebrazo, reduciendo mi velocidad de tecleo.
¿Qué medidas tomáis contra estos problemas, u otros derivados del uso intensivo en la informática?
|
|
|
9
|
Programación / Programación C/C++ / Re: un libro?
|
en: 27 Enero 2018, 00:53 am
|
Yo también soy nuevo programando C y C++. Te envié un mensaje por si quieres unirte a un foro que hice para comenzar con gente a programar desde 0, aún sigo solo, así que comenzaríamos con el mismo nivel. El libro de Ansi C de Kerningham y Ritchie, es un clásico, es el libro de los padres del C. Aunque no sé si ahora servirá o se habra quedado algo obsoleto. Me explico, es un libro con las bases del C y mejor comprar su última edición (para que no vengan muchas erratas); pero quizás el C haya cambiado algo desde aquellos años hasta hoy. Yo voy buscando algo más actual, que lleve las bases antiguas, pero tb que tenga los contenidos que hayan cambiado recientemente en el C... ¿Qué os parece el Manual de referencia C de HERBERT SCHILDT? Está en español. Lo malo es su precio; pero si es un buen libro que abarca todo y es actual, yo lo compraría. Y algo que parece más divertido es el A programar se aprende jugando de la editorial Paraninfo, que ese me lo pienso comprar sí o sí. Aunque la verdad no tengo ni idea cómo será... solo me atrae el título... igual luego me la pego con ese libro. ¿Qué opnináis de ambos libros para iniciar en C? PD: Y C++ no es C, C++ es un C orientado a Objetos (más moderno...), pero me han aconsejado ya varias personas que aprenda primero C y después C++. Aunque aprendí C++ primero hasta llegar a matrices y después me cambie a C. pero son casi similares al principio.
Aquí dejo una lista de libros me déis vuestra opinión: Libro | Autor | Editorial | Precio | Año | Edición | Páginas | El lenguaje de programación C | Kerningham y Ritchie | Prentice Hall | 30,00 € | 1991 | 2 | 294 | C. Manual de referencia. | Herbert Schildt | McGraw-Hill | 52,21 € | 2004 | 4 | 744 | C. Guía de autoenseñanza | Herbert Schildt / Carlos Cervigon Ruckaüer (tr.) | McGraw-Hill | 37,00 € | 2001 | 2 | 520 | A programar se aprende jugando | Jose Mª Maestre Torreblanca / Jesus Relinque Perez | Paraninfo | 18,05 € | 2017 | 1 | 184 | Cómo programar en C++ | Deitel Harvey / Deitel Paul | ADDISON-WESLEY | 59,66 € | 2014 | 9 | 1016 | C ++. Guía de autoenseñanza | Herbert Schildt / Carlos Cervigon Ruckaüer (tr.) | McGraw-Hill | 40,85 € | 2001 | 2 | 480 | Algoritmos en C++ | Robert Sedgewick / Fernando Davara Rodriguez | Diaz de Santos Ediciones S.A. | 47,50 € | 1995 | 1 | 750 |
|
|
|
|
|
|
|