powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ исходного кода. Разбор IOCCC 1985 august
25 сообщений из 281, страница 11 из 12
Анализ исходного кода. Разбор IOCCC 1985 august
    #38867955
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryРабота по извлечению идентификаторов из строки сложнее. Нужно дополнительно хранить текущий индекс внутри строки.
Сложнее, но не особо.
Сделай структуру-обертку и с ней работай
Код: plaintext
1.
2.
3.
4.
struct str_file {
  char* str;
  char* index;
}
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38867957
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а вы знаете почему Стивен и ко выбрали логотипом яблоко ? Одну из трёх теорий, непосредственно связанных с ним

PS
ну все, сейчас не смогу заснуть, жду - не дождусь фильма ^_^

Модератор: Редактировано

Модератор: Вложение удалено.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38867960
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSashaMercuryРабота по извлечению идентификаторов из строки сложнее. Нужно дополнительно хранить текущий индекс внутри строки.
Сложнее, но не особо.
Сделай структуру-обертку и с ней работай
Код: plaintext
1.
2.
3.
4.
struct str_file {
  char* str;
  char* index;
}



Думал про это. Но решил не использовать. Спасибо
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38867964
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий, по хорошему ещё бы длину в ней хранить. Если ничего не придумаю до понедельника, то буду использовать обёртку, вероятно
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38867977
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДмитрий, по хорошему ещё бы длину в ней хранить. Если ничего не придумаю до понедельника, то буду использовать обёртку, вероятно
Если это классическая строка, то конец так проверяется
Код: plaintext
1.
*index == 0


если нет, то добавить указатель на последний символ
Код: plaintext
1.
2.
3.
4.
5.
struct str_file {
  char* str;
  char* index;
  char* end;
}


и проверять так
Код: plaintext
1.
index > end


так операций меньше по сравнению с хранением смещения и длины строки.
Последовательное чтение элементарно делается:
Код: plaintext
1.
2.
3.
4.
5.
6.
index++;
if(index > end) {
  return EOF;
} else {
  return *index;
}


изначально index = str - 1
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38867978
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryegorych,
мне кажется, что каждая переменная удваивает сложность программы. Жалко читабельности
В Паскале строки хранят внутри себя длину. Точнее структура данных представляющая
строки ее инкапсулирует. Это вобщем-то имеет преимущество. Сравнение длин строк
идёт очень быстро. В отличие от "C" ASCIIZ строк. Развивая эту идею можно положить
рядышком с длинной и current_position.

Твой тезис о читабельности - неверный. Инкапсуляция тебе в помощь.
А попытка "скромничать" породит еще несколько антипаттерном. Будешь потом
"тяпкой" корчевать свой код. Выкорчёвывать "паттерны скромности".
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38867990
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо. Я подумаю, обо всём этом.
PS
ребята, я боюсь эти британцы исказили историю, и фильм может разочаровать.И выбрали попсового актёра на роль Тьюринга. В английских театрах всё наоборот. Главные роли играют самые некрасивые и непримечательные люди. Почему ? Для того чтобы передавать идею и завоевывать публику игрой, а не лицом. Актерские качества первичны.
меня гонят..Всего доброго

Модератор: Редактировано
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868056
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саша. Давай британцев и Тьюринга под спойлер.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868058
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ Паскале строки хранят внутри себя длину.что ограничивает размер строки до 255 символов, потому что длина у них хранится в нулевом байте. А если надо строку побольше, то бери ASCIIZ-строку, чудес то ведь не бывает ))
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868070
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychчто ограничивает размер строки до 255 символов, потому что длина у них хранится в нулевом байте.Это у Борландов.
Но никто не запрещает использовать честный record.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868072
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно. Оракл тоже свинью подкинул. Самое смешное что один и тот-же тип данных VARCHAR2
в PLSQL машине ограничен в 32К а в табличке не более 4000 байт.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868096
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНо никто не запрещает использовать честный record.а рекорд - это не аналог структуры у них, разве?
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868107
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychа рекорд - это не аналог структуры у них, разве?Аналог, но это не мешает использовать записи для реализации строк языка Pascal.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868116
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovegorychа рекорд - это не аналог структуры у них, разве?Аналог, но это не мешает использовать записи для реализации строк языка Pascal.если внутри будет сидеть pchar и длина строки отдельным полем то, это ничем не отличается от того, что DimaT предлагает для С.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868147
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychBasil A. Sidorovпропущено...
Аналог, но это не мешает использовать записи для реализации строк языка Pascal.если внутри будет сидеть pchar и длина строки отдельным полем то, это ничем не отличается от того, что DimaT предлагает для С.
Это близко к stl::string но Саша насколько я понял не юзает STL.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868294
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
struct Fstring
{
	char* s;
	char* index;
};

struct Fstring* create_Fstring(const char* s)
{
	struct Fstring* fs = (struct Fstring*)malloc(sizeof(struct Fstring));
	fs->s = NULL;
	size_t pow = strlen(s) + 1;
	fs->s = (char*)malloc(sizeof(char)*pow);
	strcpy(fs->s, s);
	fs->index = fs->s;
	return fs;
}

void free_Fstring(struct Fstring* fs)
{
	free(fs->s);
	free(fs);
}



пока сделал так. Но мне это не очень нравится. Хочется реализацию этого на уровне стандартной библиотеки. Только не такую как в языке Паскаль
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868296
Фотография 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.
int get_identifier_from_Fstring(char* s,  struct Fstring* fs)
{
	char c = *s++ =  *fs->index++;
	if (isalpha(c) || c == '_')//слово
	{
		while (isalnum(c = *s++ = *fs->index++) || c == '_');
		*--s = '\0';
		--fs->index;
		return WORD;
	}
	else if (isdigit(c))//число
	{
		while (isdigit(c = *s++ = *fs->index++));
		*--s = '\0';
		--fs->index;
		return NUMBER;
	}
	else if (c == '\0')//конец строки
	{
		return '\0';
	}
	else //символ ( ) ; smth else 
	{
		*s = '\0';
		return SYMBOL;
	}
}



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

1. Пришел к выводу, что по хорошему вот как нужно делать: в каждом крупном проекте должен быть файл с именем fe: libs.h
В него должны подключаться все модули этой программы. А в файле содержащем точку входа нужно подключать libs.h

2. Возможно константы определенные макрозаменами стоит хранить в одном файле, и включать его в каждый . Далее циклом собирать каждую единицу трансляции. Это предложение совсем абстрактное.

3. Можно ли построить саму программу или корректный механизм трансляции и сборки программ без использования дополнительных директив сборки, fe таких как pragma once и схожего назначения? Это основной вопрос о котором я думаю. Возможно это так, но тогда процесс добавления нового модуля в программу будет крайне затруднителен. Ответьте пожалуйста на этот вопрос

4. Используете ли вы pragma once и как вы относитесь к этой директиве ?
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38868997
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЗдравствуйте.

1. Пришел к выводу, что по хорошему вот как нужно делать: в каждом крупном проекте должен быть файл с именем fe: libs.h
В него должны подключаться все модули этой программы. А в файле содержащем точку входа нужно подключать libs.h

2. Возможно константы определенные макрозаменами стоит хранить в одном файле, и включать его в каждый . Далее циклом собирать каждую единицу трансляции. Это предложение совсем абстрактное.

3. Можно ли построить саму программу или корректный механизм трансляции и сборки программ без использования дополнительных директив сборки, fe таких как pragma once и схожего назначения? Это основной вопрос о котором я думаю. Возможно это так, но тогда процесс добавления нового модуля в программу будет крайне затруднителен. Ответьте пожалуйста на этот вопрос

4. Используете ли вы pragma once и как вы относитесь к этой директиве ?1. Да. Я часто использую такой заголовочный файл. Он особенно хорошо живет вместе с прекомпляцией заголовков.

2. Объявлять константы через дефайны - да. Циклом собирать единицу трансляции... ээээ??? Зачем там цикл?

3. Да конечно можно собирать без директив сборки. Все эти директивы это совершенно ненужные костыли которые больше вредят чем помогают. Используя их можно чуть-чуть облегчить себе жизнь на первом году, но они жутко мешают при попытках переноса программы в другое окружение.

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

Программа препроцессорной обработки кода на языке программирования Си в первом приближении готова C:
И её не так стыдно показать. Только немного потестирую
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38869047
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако чем-то pragma once помешала? Неужели приятнее плодить что-то вроде #ifndef _FILE_H_SOME_GUID_LIKE_CRAP/#define _FILE_H_SOME_GUID_LIKE_CRAP/#endif по заголовкам?
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38869100
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wst,

её не все компиляторы поддерживают.
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38869102
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstОднако чем-то pragma once помешала? Неужели приятнее плодить что-то вроде #ifndef _FILE_H_SOME_GUID_LIKE_CRAP/#define _FILE_H_SOME_GUID_LIKE_CRAP/#endif по заголовкам?ага, приятней. Ибо стандартно, православно и работает везде
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38869195
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не поддерживает IBM XL C/C++. Наверняка не поддерживают компиляторы от каких-то микроконтроллеров. Это повод отказываться от нее в остальных случаях?
...
Рейтинг: 0 / 0
Анализ исходного кода. Разбор IOCCC 1985 august
    #38869316
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... тут вообще всё печально. По поводу #pragma once

https://ru.wikipedia.org/wiki/Pragma_once

цитирую

В наборе компиляторов GCC до версии 3.4 считалась устаревшей и для применения не рекомендовалась.[1] Однако из-за широкого применения это решение было изменено.[2]
Можно использовать обе команды, #pragma once и include guards, для написания переносимого кода, что также может принести выгоду от применения #pragma once при оптимизации (если компилятор её поддерживает):
...
Рейтинг: 0 / 0
25 сообщений из 281, страница 11 из 12
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ исходного кода. Разбор IOCCC 1985 august
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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