powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ исходного кода. Разбор IOCCC 1985 august
25 сообщений из 281, страница 7 из 12
Анализ исходного кода. Разбор IOCCC 1985 august
    #38811496
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЯ правильно вас понял ?
Да
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38811497
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я не минимизацией занимаюсь:), а хочу чтобы один и тот-же алгоритм приводился один раз, а не писался отдельно для файла или строки
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38811519
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДа я не минимизацией занимаюсь:), а хочу чтобы один и тот-же алгоритм приводился один раз, а не писался отдельно для файла или строки
Прочитай файл в строку и обрабатывай своим алгоритмом. Не на том экономишь.

Если думаешь что файл медленно читается - решай именно эту проблему, выделяй в памяти место под весь файл и читай его за один раз. Можно использовать средства ОС, тогда ОС это сделает за тебя.
Почитай Отображение файла в память .
Например для виндовса читай про CreateFileMapping()
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38811526
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryа хочу чтобы один и тот-же алгоритм приводился один раз, а не писался отдельно для файла или строки
ну так уже сказали - используй абстракцию потока(с концом файла пущай поток сам разбирается, о типе тож знать в алгоритме незачем )
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38811558
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилс концом файла пущай поток сам разбирается, о типе тож знать в алгоритме незачем
Да, это по-любому.

SashaMercury,

примерно так:
Код: plaintext
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.
struct Stream
{
	int (*get_symb)(struct Stream*);
 };

struct FileStream{
   struct Stream stream;
   FILE* f;
};

int FileStream_get_symb(struct Stream* stream)
{
    struct FileStream* fstream = (struct FileStream*) stream;
    return fgetc(fstream->f);
}

int main()
{
    struct FileStream fs;
    fs.stream.get_symb = FileStream_get_symb;
    fs.f = fopen(...);
    
    process((struct Stream*)&fs);
    
    fclose(fs.f);
}



С буфером в памяти - по аналогии.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38811637
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо C:

До своего отлета постараюсь разобраться и переделать мой код(в любом случае выложу то что получится), использовав все советы выше.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38811815
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли думаешь что файл медленно читается - решай именно эту проблему, выделяй в памяти место под весь файл и читай его за один раз. Можно использовать средства ОС, тогда ОС это сделает за тебя.
Почитай Отображение файла в память .
Например для виндовса читай про CreateFileMapping()
Дежа-вю. Я уже где-то слышал универсальный совет - переколбасить весь I/O на файл-маппинг.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38811837
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДежа-вю. Я уже где-то слышал универсальный совет - переколбасить весь I/O на файл-маппинг.
Я этого не предлагал, но пользуюсь частенько для чтения.

Как минимум для писания логов это лишнее.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38815689
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Занимаюсь декомпозицией решения в части организации расположения элементов программного кода. Сейчас, весь код в одном файле, мне это не нравится.
Создал файл Macro.h в него поместил такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
struct Macro
{
	int type;//тип макроопределения, 0:object-like macro,1:function-like macro
	int count_args;//количество аргументов. максимум 13 бит, согласно стандарту ISO/IEC 9899:201x максимальное число
	//макроопределений в одной единице трансляции 4095=4*2^10-1,т.о. достаточно 12 бит, +1(на всякий случай)
	char* identifier;
	char** list_args;//массив аргументов
	char* rep_list;
};



и Macro.cpp

Код: plaintext
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.
#include <stdio.h>
#include <stdlib.h>
#include "Macro.h"

//установка стартового значения макроопределения
int setstartvalue_Macro(struct Macro* m)
{
	m->type = 0;
	m->count_args = 0;
	m->identifier = NULL;
	m->list_args = NULL;
	m->rep_list = NULL;
	return 0;
}

int view_Macro(struct Macro* m)
{
	printf(m->type == 0 ? "type: object-like macro\n" : "type: function-like macro\n");
	printf("identifier: %s\n", m->identifier);
	printf("count arguments: %i\n", m->count_args);
	for (int i = 0; i < m->count_args; ++i)
	{
		printf("argument[%i]: %s\n", i, m->list_args[i]);
	}
	printf("replacement list: %s\n", m->rep_list);
	return 0;
}



В главном файле (как он правильно называется ? Запускаемый ?), подключаю Macro.cpp.
Но мне кажется это неправильно, скорее всего, нужно описать прототипы функций в файле Macro.h и подключать его. Верно ?
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38815690
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает, но мне кажется, что так не делается
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38815691
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О как. Сделал так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
struct Macro
{
	int type;//тип макроопределения, 0:object-like macro,1:function-like macro
	int count_args;//количество аргументов. максимум 13 бит, согласно стандарту ISO/IEC 9899:201x максимальное число
	//макроопределений в одной единице трансляции 4095=4*2^10-1,т.о. достаточно 12 бит, +1(на всякий случай)
	char* identifier;
	char** list_args;//массив аргументов
	char* rep_list;
};

int setstartvalue_Macro(struct Macro* m);

int view_Macro(struct Macro* m);



ошибка
Error 9 error LNK2001: unresolved external symbol _setstartvalue_Macro ...preprocessing.obj

делаю так
Код: plaintext
1.
2.
3.
extern int setstartvalue_Macro(struct Macro* m);

extern int view_Macro(struct Macro* m);



нет результата
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38815807
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

подозреваю, что снова смешаны исходники C и C++.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38815852
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВ главном файле (как он правильно называется ? Запускаемый ?), подключаю Macro.cpp.это как? #include "Macro.cpp"? нет, так не делается. Делается #include "Macro.h", в котором указываются прототипы функций и структуры данных
В файле Macro.h есть Include guard ?
И почему опять .cpp? ты же вроде на С решил писать?
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38816847
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolf,

вы полностью правы.

egorych, Include guard отсутствует.
Моя невнимательность приводит к тому что пишу на Си, а файлы забываю правильно именовать.

Спасибо что подсказали :)
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38816984
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryМоя невнимательность приводит к тому что пишу на Си, а файлы забываю правильно именовать.
Мы будем тебе чаще это напоминать.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38825684
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Скажите пожалуйста, как вам на вскидку такая функция ?
Код: plaintext
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.
#define IDENTIFIER 1
#define NUMBER 2
#define SYMBOL 3

int get_word(char* s, FILE* in)
{
	int c = *s++ = getc(in);
	if (isalpha(c) || c == '_')//identifier
	{
		while (isalnum(c = *s++ = getc(in)) || c == '_');
	        *--s = '\0';
		ungetc(c, in);
		return IDENTIFIER;
	}
	else if (isdigit(c))//число
	{
		while (isdigit(c = *s++ = getc(in)));
		*--s = '\0';
		ungetc(c, in);
		return NUMBER;
	}
	else if (c == EOF)//конец файла
	{
		return EOF;
	}
	else //символ ( ) ; smth else 
	{
		*s = '\0';
		return SYMBOL;
	}
	return -1; //не уверен что всё учёл
}



PS
feof не проверяет текущий символ потока и работает по другому ? Нужно использовать её ?
softwarerSashaMercuryдля меня очевидно, что он лучше во всём,
Так не бывает. Можно нежно любить свой бугатти вейрон, но таки для некоторых задач лучше подходит камаз, а для некоторых - велосипед.

При этом, нежно любя свой бугатти вейрон, стоит таки знать и понимать его недостатки. Скажем, если он сломается где-нибудь под Тюменью, будет достаточно проблематично найти запчасть.

SashaMercuryОчевидным решение проблемы определения конца файла будет возврат символа не принадлежащего пространству возможных элементов
Одно из важных качеств разработчика - умение выбирать лучшее решение, не останавливаясь на очевидном . Описанное Вами - давно известный путь в адъ. Почти все проходили это, засовывая всякие минус единицы в возраст и прочие "что никак не может встретиться". Потом приходят неанглоязычные пользователи, и вдруг оказывается, что виндовая буква "я" совершенно случайно равна EOF (char ведь у нас signed, мы помним, да?). Потом у нас приходит unicode, и вдруг оказывается, что в пространстве int16 перестаёт хватать места. Итдитп., и в итоге оказывается, что в библиотеку таки попадает feof(), потому что гениальной идеи "возврата символа не принадлежащего пространству" таки не хватает, чтобы прикрыть задницу.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38825763
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЗдравствуйте.
Скажите пожалуйста, как вам на вскидку такая функция ?
Код: plaintext
1.
int c = *s++ = getc(in);

вот это - отвратительно.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38826029
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саша! OMG! То о чём я говорил... Тело цикла в скобках while.

И что ты получил? Оптимизацию? И как дебаггер будет ходит по этой колбасе?
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38826187
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марк, пользуюсь приёмами K&R..
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38826189
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercuryЗдравствуйте.
Скажите пожалуйста, как вам на вскидку такая функция ?
Код: plaintext
1.
int c = *s++ = getc(in);

вот это - отвратительно.

ну вот.. K&R глава 6.3..авторы языка так учат..
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38826225
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryну вот.. K&R глава 6.3..авторы языка так учат..фтопку такие приёмы, слишком много побочных эффектов на одну строчку кода, плохо отлаживаемо, плохо читаемо, плохо сопровождаемо.
Зато, конечно, олдскулл, будь он неладен ))
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38826251
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryegorychпропущено...
вот это - отвратительно.

ну вот.. K&R глава 6.3..авторы языка так учат..
Что-то я не верю что они учат упаковывать всё в скобки к while.

Знаешь... год назад здесь был один перец. Он писал ультра-короткий язык.
Никто его не понимал. Афтор был непонят. Обижен. И как следствие покинул
форум.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38826278
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного модифицировал, но в K&R было так
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38826281
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя есть ещё пример, где именно в скобках происходит присваивание, не могу найти в электронной версии
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38826434
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саш. Ну... будешь бит когда-нибудь коллегами Крепко-крепко.
...
Рейтинг: 0 / 0
25 сообщений из 281, страница 7 из 12
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ исходного кода. Разбор IOCCC 1985 august
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]