Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - JPS

#1
Gracias Mafus y 6666.

Si lo leí... en parte... pero no lo logré entender del todo, supongo que por la densidad de contenido. Tengo que dedicarle más tiempo y también le echaré un ojo a eso de sobrecarga de operadores para ampliar conocimientos.
#2
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("  i   = %d\n",i);
printf("++i   = %d\n",++i);
printf("  i++ = %d\n",i++);
printf("++i   = %d\n",++i);
printf("  i++ = %d\n",i++);
printf("++i   = %d\n",++i);
printf("  i++ = %d\n",i++);
printf("++i   = %d\n",++i);
printf("  i++ = %d\n",i++);
printf("++i   = %d\n",++i);
printf("  i++ = %d\n",i++);
printf("  i   = %d\n\n",i);

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?

#3
Gracias Engel, justo lo que necesitaba.
#4
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

*/

#5
Sí, en el enlace que dejé lo explica. Pero solo funciona en Notepad++ si tiene instalado ese plugin. En DEV++ no he visto tal opción.
#6
No es de C en sí pero tiene relación.

Quiero hacer un documento de Word con lo que voy aprendiendo en C y me gustaría poner el código que se mostrase en colores (como en DEV++).

¿Alguien sabe alguna manera de colorearlo rápido? Para no tener que estar línea por línea coloreando según qué palabras del codigo sí y qué otras no.




Ya di con ello: https://stackoverflow.com/questions/3252098/what-is-the-best-way-to-insert-source-code-examples-into-a-microsoft-word-docume


#7
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
Hardware / Ergonomía en la Informática
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 C/C++ / Re: un libro?
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:


LibroAutorEditorialPrecioAñoEdiciónPáginas
El lenguaje de programación CKerningham y RitchiePrentice Hall30,00 €1991
2
294
C. Manual de referencia.Herbert Schildt McGraw-Hill52,21 €2004
4
744
C. Guía de autoenseñanzaHerbert Schildt / Carlos Cervigon Ruckaüer (tr.)McGraw-Hill37,00 €2001
2
520
A programar se aprende jugando Jose Mª Maestre Torreblanca / Jesus Relinque PerezParaninfo18,05 €2017
1
184
Cómo programar en C++Deitel Harvey / Deitel PaulADDISON-WESLEY59,66 €2014
9
1016
C ++. Guía de autoenseñanzaHerbert Schildt / Carlos Cervigon Ruckaüer (tr.)McGraw-Hill40,85 €2001
2
480
Algoritmos en C++Robert Sedgewick / Fernando Davara RodriguezDiaz de Santos Ediciones S.A.47,50 €1995
1
750
#10
Programación General / Re: Dudas sobre SQL
15 Enero 2018, 23:04 PM
Bien... ya encontré el problema de por qué no me funciona bien la GUI gráfica HeidiSQL instalando MariaDB.

Y... es el mismo de por qué no me iba bien la GUI gráfica de phpMyAdmin instalando XAMPP.

Es el puto problema de Windows 7 que "aunque entres como administrador no ejecutas los programas como administrador".

Por lo que en los dos casos se soluciona:

1.- Seleccionando propiedades del icono de la GUI, compatibilidad y ejecutar como administrador.

2.- Vas al directorio de MariaDB o de XAMPP y en el buscas el archivo mysql.exe en todas sus subcarpetas.

3.- Haces el proceso 1. con los archivos: mysql.exe y mysqld.exe.

4.- En MariaDB reinicias el equipo. En XAMPP no hace falta.


Por si os sirven, dejo los enlaces que encontré para aprender SQL y manejar MariaDB:

Tipos de bases de datos y las mejores bases de datos del 2016

MariaDB - Spanish

Curso en español Youtube MySQL/MariaDB en Linux, sirve también en el CMD de Win

Curso en inglés de Youtube HeidiSQL  con MariaDB en Windows.

XAMPP

Plugins para XAMPP

Vídeo donde encontré el problema que no me dejaba entrar

P.D.: Gracias por el WAMP engel lex, aún tengo que descargarlo y probarlo; aunque por los tutoriales encontrados y lo cuidada de su GUI me gusta, de momento, HeidiSQL+MariaDB (XAMPP lleva servidor apache y más cosas que de momento no necesito).