Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа

.CPP
Скачиваний:
15
Добавлен:
01.05.2014
Размер:
3.85 Кб
Скачать
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>

void dynamic_memory (void);
void output (void);
int detect (char ch, int *index);

FILE *f;
int  i, index, word = 0, real = 0, integer = 0,
     letter, max = 0, *int_array;
char ch, **char_array;
float *float_array;

void main ()
{ clrscr ();
  if ((f = fopen ("array.dat", "w+")) == NULL)
   { puts (" ЌҐ ¬®Јг ®вЄалвм д ©«");
     exit (1);
   }
  puts (" ‚ўҐ¤ЁвҐ «оЎлҐ бЁ¬ў®«л. „«п § ўҐа襭Ёп ­ ¦¬ЁвҐ ESC");
  while (ch != 27)
   {
    letter = 0;
    do {
	ch = getch ();
	if (ch == 13) printf ("\n");
	if (ch != 9 && ch != 27) printf ("%c", ch);
	else printf ("\t");
       }
     while (ch == 9 || ch == 13 || ch == 32);
   index = 3;
   if (ch >= '0' && ch <= '9') index = 1;
   if (ch == '-' || ch == '+') index = 1;
   if (ch == '.') index = 2;
   if (ch == 27) break;
   if (ch != 27) fprintf (f, "%c", ch);
	letter ++;
	ch = getch ();
	if (ch == 13) printf ("\n");
	if (ch != 9 && ch != 27) printf ("%c", ch);
	else printf ("\t");
   do {
	switch (index)
	{
	 case 1:
	  if (ch >= '0' && ch <= '9') index = 1;
	  else if (ch == '.') index = 2; else index = 3;
	  break;
	 case 2:
	  if (ch >= '0' && ch <= '9') index = 2; else index = 3;
	  break;
	 default:
	  index = 3;
	}
	if (ch != 27) fprintf (f, "%c", ch);
	letter ++;
	ch = getch ();
	if (ch == 13) printf ("\n");
	if (ch != 9 && ch != 27) printf ("%c", ch);
	else printf ("\t");
      }
   while (ch != 9 && ch != 13 && ch != 27 && ch != 32);
   if (index == 1) integer ++;
   if (index == 2) real ++;
   if (index == 3) word ++;
   fseek (f, -letter, SEEK_CUR);
   dynamic_memory ();
  }
  printf ("\n");
  output ();
  fclose (f);
  puts ("\n Ќ ¦¬ЁвҐ «оЎго Є« ўЁиг");
  ch = getch ();
}

void dynamic_memory (void)
{if (index == 1)
 {if (integer == 1)
  int_array = (int*) malloc (sizeof (int));
  if (integer > 1)
  int_array = (int*) realloc (int_array, integer * sizeof (int));
  if (!int_array)
   {puts (" ЌҐ¤®бв в®з­® Ї ¬пвЁ");
    exit (1);
   }
  fscanf (f, "%d", &int_array [integer-1]);
 }
 if (index == 2)
  {if (real == 1)
   float_array = (float*) malloc (sizeof (float));
   if (real > 1)
   float_array = (float*) realloc (float_array, real * sizeof (float));
   if (!float_array)
    {puts (" ЌҐ¤®бв в®з­® Ї ¬пвЁ");
    exit (1);
    }
   fscanf (f, "%f", &float_array [real-1]);
  }
 if (index == 3)
  {if (word == 1)
   char_array = (char**) malloc (sizeof (char*));
   if (word > 1)
   char_array = (char**) realloc (char_array, word * sizeof (char*));
   char_array [word-1] = (char*) malloc ((max+1) * sizeof (char));
   if (letter > max)
    {max = letter;
     for (i = 0; i < word; i++)
     char_array [i] = (char*) realloc (char_array [i], (max+1) * sizeof (char));
    }
   if (!char_array [word-1])
    {puts (" ЌҐ¤®бв в®з­® Ї ¬пвЁ");
     exit (1);
    }
   fscanf (f, "%s", char_array [word-1]);
  }
 fprintf (f, " ");
}

void output (void)
{printf ("\n");
 if (integer > 0)
  {puts (" Њ ббЁў 楫ле зЁбҐ«:");
   fprintf (f, "\n Њ ббЁў 楫ле зЁбҐ«:\n");
   for (i = 0; i < integer; i++)
    {printf ("%d ", *(int_array+i));
     fprintf (f, "%d ", *(int_array+i));
    }
   printf ("\n");
  }
 if (real > 0)
  {puts (" Њ ббЁў ¤Ґ©б⢨⥫м­ле зЁбҐ«:");
   fprintf (f, "\n Њ ббЁў ¤Ґ©б⢨⥫м­ле зЁбҐ«:\n");
   for (i = 0; i < real; i++)
    {printf ("%f ", *(float_array+i));
     fprintf (f, "%f ", *(float_array+i));
    }
   printf ("\n");
  }
 if (word > 0)
  {puts (" Њ ббЁў б«®ў:");
   fprintf (f, "\n Њ ббЁў б«®ў:\n");
   for (i = 0; i < word; i++)
    {printf ("%s ", char_array [i]);
     fprintf (f, "%s ", char_array [i]);
    }
   printf ("\n");
  }
 free (int_array);
 free (float_array);
 free (char_array);
}