<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>http://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_Programaci%C3%B3n_en_C%2FProg109</id>
	<title>Curso de Programación en C/Prog109 - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.cabal.mx/index.php?action=history&amp;feed=atom&amp;title=Curso_de_Programaci%C3%B3n_en_C%2FProg109"/>
	<link rel="alternate" type="text/html" href="http://wiki.cabal.mx/index.php?title=Curso_de_Programaci%C3%B3n_en_C/Prog109&amp;action=history"/>
	<updated>2026-05-13T02:16:35Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>http://wiki.cabal.mx/index.php?title=Curso_de_Programaci%C3%B3n_en_C/Prog109&amp;diff=5506&amp;oldid=prev</id>
		<title>Perseuz: /* Prog109 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.cabal.mx/index.php?title=Curso_de_Programaci%C3%B3n_en_C/Prog109&amp;diff=5506&amp;oldid=prev"/>
		<updated>2014-06-02T19:33:17Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Prog109&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
* [[:#Prog109 | malloc(), free(), exit() &amp;amp; strtod()]]&lt;br /&gt;
** [[:#Resultado | Resultado]]&lt;br /&gt;
** [[:#Explicación | Explicación]]&lt;br /&gt;
&lt;br /&gt;
== Prog109 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_FANCY_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt; /* for malloc(), free() */&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main( void )&lt;br /&gt;
{&lt;br /&gt;
  double * ptd;&lt;br /&gt;
&lt;br /&gt;
  char NumSTR[10];&lt;br /&gt;
&lt;br /&gt;
  char * endptr;&lt;br /&gt;
&lt;br /&gt;
  int i = 0,&lt;br /&gt;
      Max,&lt;br /&gt;
      NumCharsLeidos,&lt;br /&gt;
      NumEntradas,&lt;br /&gt;
      NumPuntos,&lt;br /&gt;
      NumValidosChars,&lt;br /&gt;
      Numero;&lt;br /&gt;
&lt;br /&gt;
  printf( &amp;quot;¿Cuál es el máximo número de dobles que vamos a guardar? &amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  fgets( NumSTR, 4, stdin );&lt;br /&gt;
  NumValidosChars = 0;&lt;br /&gt;
  if( ( NumCharsLeidos = strlen( NumSTR ) )  &amp;gt; 4 )&lt;br /&gt;
  {&lt;br /&gt;
    puts( &amp;quot;Entrada ¡INVALIDO!\nDebe ser menor que 99&amp;quot; );&lt;br /&gt;
    exit( 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if( NumSTR[0] == &amp;#039;0&amp;#039; )&lt;br /&gt;
  {&lt;br /&gt;
    puts( &amp;quot;Debemos guardar un mínimo de 1 double&amp;quot; );&lt;br /&gt;
    exit( 1 );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if( *(NumSTR + NumCharsLeidos - 1) != &amp;#039;\n&amp;#039; )&lt;br /&gt;
  {&lt;br /&gt;
    puts( &amp;quot;Entrada ¡INVALIDO!\nDebe ser menor que 99&amp;quot; );&lt;br /&gt;
    exit( 1 );&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
    *(NumSTR + NumCharsLeidos - 1) = &amp;#039;\0&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  for( i = 0; i &amp;lt; NumCharsLeidos -1; i++ )&lt;br /&gt;
    if( ( *(NumSTR + i ) &amp;gt;= &amp;#039;0&amp;#039; &amp;amp;&amp;amp; *(NumSTR + i ) &amp;lt;= &amp;#039;9&amp;#039; ) )&lt;br /&gt;
      NumValidosChars++;&lt;br /&gt;
&lt;br /&gt;
  if( NumCharsLeidos == 1 || NumValidosChars != NumCharsLeidos - 1 )&lt;br /&gt;
  {&lt;br /&gt;
    puts( &amp;quot;Entrada ¡INVALIDO!&amp;quot; );&lt;br /&gt;
    exit( 1 );&lt;br /&gt;
  }&lt;br /&gt;
  Max = atoi( NumSTR );&lt;br /&gt;
&lt;br /&gt;
  ptd = (double *)malloc( Max * sizeof( double ) );&lt;br /&gt;
&lt;br /&gt;
  if( ptd == NULL )&lt;br /&gt;
  {&lt;br /&gt;
    puts( &amp;quot;Falló la asignación de memoria. Adiós.&amp;quot; );&lt;br /&gt;
    exit( EXIT_FAILURE );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  puts( &amp;quot;Ingresa los dobles (q para terminar):&amp;quot; );&lt;br /&gt;
  &lt;br /&gt;
  NumEntradas = 0;&lt;br /&gt;
&lt;br /&gt;
  while( ( NumEntradas &amp;lt; Max ) &amp;amp;&amp;amp; fgets( NumSTR, 8, stdin ) )&lt;br /&gt;
  {&lt;br /&gt;
    NumValidosChars = 0;&lt;br /&gt;
    NumCharsLeidos = strlen( NumSTR );&lt;br /&gt;
&lt;br /&gt;
    if( NumSTR[0] == &amp;#039;q&amp;#039; &amp;amp;&amp;amp; NumCharsLeidos == 2 )&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    if( *(NumSTR + NumCharsLeidos - 1) != &amp;#039;\n&amp;#039; )&lt;br /&gt;
    {&lt;br /&gt;
      puts( &amp;quot;Entrada ¡INVALIDO! (Tan Grande - No más que 6 chars)&amp;quot; );&lt;br /&gt;
      while( getchar() != &amp;#039;\n&amp;#039; );&lt;br /&gt;
      puts( &amp;quot;Ingresa los dobles:&amp;quot; );&lt;br /&gt;
      continue;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
      *(NumSTR + NumCharsLeidos - 1) = &amp;#039;\0&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    NumPuntos = 0;&lt;br /&gt;
    &lt;br /&gt;
    for( i = 0; i &amp;lt; NumCharsLeidos -1; i++ )&lt;br /&gt;
      if( ( *(NumSTR + i ) &amp;gt;= &amp;#039;0&amp;#039; &amp;amp;&amp;amp; *(NumSTR + i ) &amp;lt;= &amp;#039;9&amp;#039; ) ||&lt;br /&gt;
          (  *(NumSTR) == &amp;#039;-&amp;#039; &amp;amp;&amp;amp; i == &amp;#039;0&amp;#039; ) ||&lt;br /&gt;
          ( *(NumSTR + i ) == &amp;#039;.&amp;#039; &amp;amp;&amp;amp; ++NumPuntos &amp;lt; 2 ) )&lt;br /&gt;
        NumValidosChars++;&lt;br /&gt;
&lt;br /&gt;
    if( NumCharsLeidos == 1 || NumValidosChars != NumCharsLeidos - 1 )&lt;br /&gt;
    {&lt;br /&gt;
      puts( &amp;quot;Entrada ¡INVALIDO!&amp;quot; );&lt;br /&gt;
      puts( &amp;quot;Ingresa los dobles:&amp;quot; );&lt;br /&gt;
      continue;&lt;br /&gt;
    }&lt;br /&gt;
    ptd[NumEntradas++] = strtod( NumSTR, &amp;amp;endptr );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  printf( &amp;quot;\nAquí son sus %d dobles:\n&amp;quot;, Numero = NumEntradas );&lt;br /&gt;
&lt;br /&gt;
  for( i = 0; i &amp;lt; Numero; i++ )&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;%7.2f &amp;quot;, ptd[i]);&lt;br /&gt;
&lt;br /&gt;
    if( i % 7 == 6 )&lt;br /&gt;
      putchar( &amp;#039;\n&amp;#039; );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if( i % 7 != 0 )&lt;br /&gt;
    putchar( &amp;#039;\n&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
  puts(&amp;quot;¡Listo!&amp;quot;);&lt;br /&gt;
  free(ptd);&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resultado ===&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
[rrc@llawyr CClase]$ gcc -Wall -o Prog109 Prog109.c &lt;br /&gt;
[rrc@llawyr CClase]$ ./Prog109&lt;br /&gt;
¿Cuál es el máximo número de dobles que vamos a guardar? 25&lt;br /&gt;
Ingresa los dobles (q para terminar):&lt;br /&gt;
q&lt;br /&gt;
&lt;br /&gt;
Aquí son sus 0 dobles:&lt;br /&gt;
¡Listo!&lt;br /&gt;
[rrc@llawyr CClase]$ ./Prog109&lt;br /&gt;
¿Cuál es el máximo número de dobles que vamos a guardar? 25&lt;br /&gt;
Ingresa los dobles (q para terminar):&lt;br /&gt;
23&lt;br /&gt;
-23&lt;br /&gt;
23.456&lt;br /&gt;
-23.456&lt;br /&gt;
Entrada ¡INVALIDO! (Tan Grande - No más que 6 chars)&lt;br /&gt;
Ingresa los dobles:&lt;br /&gt;
-23.45&lt;br /&gt;
123456&lt;br /&gt;
-123456&lt;br /&gt;
Entrada ¡INVALIDO! (Tan Grande - No más que 6 chars)&lt;br /&gt;
Ingresa los dobles:&lt;br /&gt;
-12345&lt;br /&gt;
&lt;br /&gt;
Entrada ¡INVALIDO!&lt;br /&gt;
Ingresa los dobles:&lt;br /&gt;
&lt;br /&gt;
Entrada ¡INVALIDO!&lt;br /&gt;
Ingresa los dobles:&lt;br /&gt;
quit&lt;br /&gt;
Entrada ¡INVALIDO!&lt;br /&gt;
Ingresa los dobles:&lt;br /&gt;
8765.2&lt;br /&gt;
45.67&lt;br /&gt;
-53.4.4&lt;br /&gt;
Entrada ¡INVALIDO! (Tan Grande - No más que 6 chars)&lt;br /&gt;
Ingresa los dobles:&lt;br /&gt;
5.3.2&lt;br /&gt;
Entrada ¡INVALIDO!&lt;br /&gt;
Ingresa los dobles:&lt;br /&gt;
54-3 &lt;br /&gt;
Entrada ¡INVALIDO!&lt;br /&gt;
Ingresa los dobles:&lt;br /&gt;
66&lt;br /&gt;
q&lt;br /&gt;
&lt;br /&gt;
Aquí son sus 9 dobles:&lt;br /&gt;
  23.00  -23.00   23.46  -23.45 123456.00 -12345.00 8765.20 &lt;br /&gt;
  45.67   66.00 &lt;br /&gt;
¡Listo!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explicación ===&lt;br /&gt;
 &lt;br /&gt;
[[Category:Programación en C]]&lt;br /&gt;
[[Category:CCabal]]&lt;br /&gt;
[[Category:CursoC]]&lt;/div&gt;</summary>
		<author><name>Perseuz</name></author>
		
	</entry>
</feed>