proga

proga




#include <stdio.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <errno.h>

#include <stdbool.h>


#define N 100

//#define N 5

#define VALUE_ERROR -1

#define INPUT_ERROR -2

#define FILE_ERROR -3

#define EMPTY_FILE -4

#define OK 0

#define EXCESS_VALUES 1


void print(const int *pa, int *pe)

{

  printf("Array:\n");

  while (pa != pe)

  {

    printf("%d\n",*pa);

    pa++;

  }

  printf("\n");

}


int min(const int* pb, const int* pe)

{

  int x;

  int min = (*pb) * (*(pb + 1));


  while ((pb + 1) < pe)

  {

    x = (*pb) * (*(pb + 1));

    if (min > x)

    {

      min = x;

    }

    pb++;

  }


  return min;

}


void read(FILE *f, int *pb, int **pe, int *rc)

{

  int local;


  while (((fscanf(f, "%d", &(local))) == 1))

  {


    if(pb< *pe)

    {

      *pb = local;

      pb++;

      *rc = OK;

    }

    else

    {

      *rc = EXCESS_VALUES;

    }


  }

  *pe = pb;


}


int main(int argc, char** argv)

{

  FILE *f;

  int a[N];

  int result = 0;

  int *pb = a;

  int *end = a + N;

  int rc;


  if (argc != 2)

  {

    fprintf(stderr, "your_program.exe <source file>\n");

    return INPUT_ERROR;

  }


  f = fopen(argv[1], "r");


  if (f == NULL)

  {

    fprintf(stderr, "Could not open %s because of %s\n", argv[1], strerror(errno));

    return FILE_ERROR;

  }


  read(f, pb, &end, &rc);

  print(a, end);


  fclose(f);


  if (end == pb) //если файл пуст

  {

    printf("Your file is empty.");

    return EMPTY_FILE;

  }


  if ((end - 1) == pb) //если файле только одно число

  {

    printf("Need more the 1 value");

    return VALUE_ERROR;

  }


  result = min(a, end); //массив состоит как минимум из 2-х чисел


  if (rc == EXCESS_VALUES)

    printf("The file contains more than %d values/n", N);


  printf("min= %d", result);


  return rc;


}

--------------------------------------------------------------------------------------------------

void read(FILE *f, char mas[],int len, int *real_len)

{

  int i=0;


  while((!feof(f)) && (i < len))

  {

    (fscanf(f, "%s ", &mas[i]));

    i++;

  }


  *real_len = i;

}


void poisk (FILE* f3, char x[], char y[], int real_n, int real_m)

{

  int kol = 0;

  int realkol = 0;

  int j = 0;


  for (int i = 0; i < real_n; i++)

  {

    if(y[j] == x[i])

    {

      kol++; // количество "попаданий"

      if(j == (real_m - 1))// если массиве y полностью просмотрен

      {

        j = 0;

        realkol++;

        kol = 0;

      }

      else

        j++;// взятие нового элемента массива y



    }

    else// если между элементы не равны

    {

     // if(kol == real_m) // если количество "попаданий " свопало с длиной массива y

     //  realkol++;

      kol = 0;

      j = 0;

    }

  }


  fprintf(f3, "%d", realkol);


}

int main(int argc, char** argv)

{

  FILE *f1;

  FILE *f2;

  FILE *f3;


  char x[N], y[M];

  int real_n, real_m;

  int n, m;


  if (argc != 4)

  {

    printf("your programm _.exe in_x_n.txt in_y_n.txt out_n.txt\n");

    return ENTER_ERROR;

  }


  f1 = fopen(argv[1], "r");

  if (f1 == NULL)

  {

    printf("Could not open your file file\n");

    return OPEN_ERROR;

  }


  f2 = fopen(argv[2], "r");

  if (f2 == NULL)

  {

    printf("Could not open your file file\n");

    return OPEN_ERROR;

  }


  f3 = fopen(argv[3], "w");

  if (f3 == NULL)

  {

    printf("Could not open your file file\n");

    return OPEN_ERROR;

  }


  fscanf(f1, "%d", &n); // считываем "длину" массива

  fscanf(f2, "%d", &m);


  if(n < m)

  {

    printf("Error, need n > m \n");

    return LENGTH_ERROR;

  }


  read(f1, x, n, &real_n); // чтение файла, заполнение массива, и определение "реальной длины"

  read(f2, y, m, &real_m);


  if((real_n < real_m) || (real_n == 0) || (real_m == 0))

  {

    printf("Error, need n>m, or file is empty \n");

    return LENGTH_ERROR;

  }


  poisk(f3, x, y, real_n, real_m);


  fclose(f1);

  fclose(f2);

  fclose(f3);


}

---------------------------------------------------------------------------------

# Компилятор

CC := gcc

# Опции компиляции

CFLAGS := -std=c99 -Wall -Werror -pedantic

# Общие объектные файлы

OBJS := read.o print.o kvadr.o


ifeq ($(mode), debug)# Отладочная сборка: добавим генерацию отладочной 

  CFLAGS += -g3

endif


ifeq ($(mode), release)# Финальная сборка: исключим отладочную информацию 

  CFLAGS += -DNDEBUG -g0

endif


ekz.exe : $(OBJS) ekz.o

$(CC) -o ekz.exe $(OBJS) ekz.o


read.o : read.c read.h

$(CC) $(CFLAGS) -c read.c


print.o : print.c print.h

$(CC) $(CFLAGS) -c print.c


kvadr.o : kvadr.c kvadr.h

$(CC) $(CFLAGS) -c kvadr.c


ekz.o : ekz.c read.h kvadr.h

$(CC) $(CFLAGS) -c ekz.c


clean :

$(RM) *.o *.exe



----------------------------------------------------------------------

# Компилятор

CC := gcc


# Опции компиляции

CFLAGS := -std=c99 -Wall -Werror -pedantic


# Общие объектные файлы

OBJS := hello.o buy.o


ifeq ($(mode), debug)

  # Отладочная сборка: добавим генерацию отладочной информации

  CFLAGS += -g3

endif


ifeq ($(mode), release)

  # Финальная сборка: исключим отладочную информацию и утверждения (asserts)

  CFLAGS += -DNDEBUG -g0

endif


greeting.exe : $(OBJS) main.o

$(CC) $^ -o $@


%.o : %.c *.h

$(CC) $(CFLAGS) -c $<


clean :

$(RM) *.o *.exe

---------------------------------------------------------------------------------

Шаг 1. Компиляция программы

$ gcc -std=c99 -Wall -Werror -o0 -fprofile-arcs -ftest-coverage 1.c -o 1.exe

Шаг 2. Запуск программы

Шаг 3. Запуск утилиты gcov

Чтобы запустить утилиту, используем $ gcov 1.c



Report Page