Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
ЗеХель
20 / 17 / 3
Регистрация: 04.11.2014
Сообщений: 239
Завершенные тесты: 1
1

Отладка программы

08.02.2017, 02:05. Просмотров 844. Ответов 6
Метки нет (Все метки)

Написал код для C89 стандарта. Пробую запускать на Dev С++ и Peller С, другие IDE в данный момент недоступны. Так в peller код не выполняется корректно, но заканчивается, а отладчик толком не работает, показывает, что числа из 10-й системы чтали в 16-й. В Dev код вообще зависает, как при бесконечном цикле, хотя вроде цикл все завершающиеся. Посмотрите пожалуйста и подскажите, что не так. Если есть какие возможные модификации кода, то милости прошу, только что бы они входили в стандарт C89. Суть работу кода такова: есть декартова система с набором точек( файл прикреплен, точки написаны в файле, так как необходимо), необходимо определить такую окружность, которая захватывается как можно больше точек, вывести её центр и количество захваченных точек.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main(int argc, char* argv[])
{
    int r, x, y, max_objects_destroy = 0;
    char coor_x_y[8], str_x[4], str_y[4];
    int count = 0;
    int tempo;
    int max_eff[2] = {13, 37};
 
    printf("Enter radius:\n");
    scanf("%i", &r);
 
    FILE* p;
    p = fopen("objects.txt", "r");
 
    
 
    for (int j = 0; j < 99; j ++)
    {
        for (int k = 0; k < 99; k ++)
        {
            while(( feof (p) == 0))
            {
                fgets(coor_x_y, 8, p);
 
                for(int i = 0; i < 3; i++)
                {
                    str_x[i] = coor_x_y[i];
                    str_y[i] = coor_x_y[i + 3];
                    x = atoi(str_x);
                    y = atoi(str_y);
                }
                //printf("%i %i\n", x, y);
                //printf("%s", coor_x_y);
                tempo = pow(x - k, 2) + pow(y - j, 2);
                if (pow(x - k, 2) + pow(y - j, 2) <= pow(r, 2)) 
                {
                    count++;
                }
            }
            if( count > max_objects_destroy)
            {
                max_objects_destroy = count;
                max_eff[0] = k;
                max_eff[1] = j;
            }
            count = 0;
 
        }
    
    }
    printf("The most effective point: \n x = %i y = %i \n", max_eff[0], max_eff[1]);
    printf("Will destroy %i objects.\n", max_objects_destroy);
}
0
Вложения
Тип файла: txt objects.txt (127 байт, 4 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2017, 02:05
Ответы с готовыми решениями:

Отладка программы
Ночь. Уже плохо соображаю. Решал упражнение, вот код: #include &lt;stdio.h&gt; #include &lt;string.h&gt;...

Не запускается отладка программы
При отладке программы возникает ошибка : #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include...

Отладка программы шифра Виженера
Кто может помочь, пожалуйста, уже голова болит. Ошибка в чём-то с переменной key. А вот то ли от...

Набор и отладка программы работы с символами
Написать и отладить программу, которая печатает латинский алфавит в виде .............. A ...

Отладка программы
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; char fun (char *p, char a, int len)...

6
gazlan
3163 / 1922 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
08.02.2017, 04:19 2
Цитата Сообщение от ЗеХель Посмотреть сообщение
Dev С++ и Peller С
Как-то давно, из любопытства, пробовал оба. Впечатление отвратительное.

Код грязный, но компилируется и запускается без проблем (внес пару правок).

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "stdafx.h"
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main(int argc,char** argv)
{
   int   r, x, y, max_objects_destroy = 0;
 
   char  coor_x_y[8], str_x[4], str_y[4];
   
   int   count       = 0;
   int   tempo;
   
   int   max_eff[2]  =
   {
      13, 37
   };
 
   printf("Enter radius:\n");
   scanf("%i",&r);
 
   FILE*    pIn = fopen("objects.txt","rt");
 
   if (!pIn)
   {
      // Error !
//      ASSERT(0);
      return 0;
   }
   
   for (int j = 0; j < 99; j ++)
   {
      for (int k = 0; k < 99; k ++)
      {
         while (fgets(coor_x_y,8,pIn))
         {
            for (int i = 0; i < 3; i++)
            {
               str_x[i] = coor_x_y[i];
               str_y[i] = coor_x_y[i + 3];
 
               x = atoi(str_x);
               y = atoi(str_y);
            }
   
            //printf("%i %i\n", x, y);
            //printf("%s", coor_x_y);
   
            tempo = (int)(pow(x - k,2) + pow(y - j,2));
   
            if (pow(x - k,2) + pow(y - j,2) <= pow(r,2))
            {
               count++;
            }
         }
   
         if (count > max_objects_destroy)
         {
            max_objects_destroy = count;
            max_eff[0] = k;
            max_eff[1] = j;
         }
   
         count = 0;
      }
   }
   
   printf("The most effective point: \n x = %i y = %i \n",max_eff[0],max_eff[1]);
   printf("Will destroy %i objects.\n",max_objects_destroy);
 
   fclose(pIn);
   pIn = NULL;
 
   return 0;
}
0
Миниатюры
Отладка программы  
ЗеХель
20 / 17 / 3
Регистрация: 04.11.2014
Сообщений: 239
Завершенные тесты: 1
08.02.2017, 04:34  [ТС] 3
gazlan, спасибо за правки, но коду всё так же плохо) Например при r = 3 и больше он должен выдать, что поражено может быть максимально около 9 целей, а он выдает координаты 13 37 и то, что 0 точек будет поражено. В общем в это и есть проблема.

Добавлено через 26 секунд
gazlan, и вопрос - код грязный по алгоритму или в чем?
0
ЗеХель
20 / 17 / 3
Регистрация: 04.11.2014
Сообщений: 239
Завершенные тесты: 1
08.02.2017, 04:43  [ТС] 4
Цитата Сообщение от gazlan Посмотреть сообщение
компилируется и запускается без проблем
Он и запускался, в названии я написал, что помочь с дебаггом, нормального дебаггера нет, а опыта в голове не хватает, тем более в не сильно знакомом синтаксисе старого C. Вот что я максимум смог получить от имеющихся дебаггеров: части переменных нет, некоторые почему-то в 16-й системе, в общем страх.
0
Миниатюры
Отладка программы  
gazlan
3163 / 1922 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
08.02.2017, 05:13 5
В алго я не вникал, это на вашей совести. Единственно, там где вычисляется степень и смешиваются int и double нужно смотреть внимательно. Грязь у вас во всем - нет проверок, нет возврата ресурсов, нет инициализации переменных, нет указания на режим открытия файла, "магические" числа в коде - это то, что бросилось в глаза, пока форматировал. На пустых строчках вы, зачем-то, тоже экономите - вам за них проиходится платить отдельно?

Как устроен ваш отладчик я не знаю (и знать не хочу), но всегда есть опция отладочной печати - в почти любом месте и почти в любом формате. Пишите все, что вам нужно в консоль / файл и будьте счастливы.

Обычно, возможен выбор формата DEC/HEX, но это нужно смотреть документацию к вашей IDE.
0
likehood
987 / 829 / 397
Регистрация: 25.12.2016
Сообщений: 2,727
Завершенные тесты: 3
08.02.2017, 06:06 6
Лучший ответ Сообщение было отмечено ЗеХель как решение

Решение

ЗеХель, если я правильно понял, во внутреннем цикле файл считывается содержимое всего файла, а на следующей итерации внешнего цикла указатель файла находится в конце и файл вообще не считывается. То есть, файл считывается только при j == k == 0, а дальше внутренний цикл while вообще не срабатывает. Самый простой способ с этим справиться - каждый раз возвращать указатель чтений на начало файла. Второй способ - один раз прочитать файл в массив и работать уже с этим массивом.
1
ЗеХель
20 / 17 / 3
Регистрация: 04.11.2014
Сообщений: 239
Завершенные тесты: 1
08.02.2017, 14:28  [ТС] 7
likehood, спасибо большое, как я мог забыть об этом, не первый раз уже страдаю с этим
0
08.02.2017, 14:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2017, 14:28

Не работает отладка в wxDev-C++
Всем доброго времени суток. Прочитал на форуме много тем по данной теме, но всё они не доходили...

Отладка программы
Общая постановка. Пользовательский класс Х должен содержать необходимые элементы - данные, которые...

Отладка программы
Доброго времени суток. Надо было написать задачу по поиску седловой точки по поставленной задачи....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru