HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Флуд (https://hlfx.ru/forum/forumdisplay.php?forumid=11)
-- Очередная тема о программировании (https://hlfx.ru/forum/showthread.php?threadid=2348)
Отправлено DEAD MAN 24-02-2011 в 18:51:
Здрасте, снова вернулся за помощью.
Вот такое задание (обращаюсь к вам, поскольку идей ноль, а со стрингами я так и не могу пока научится работать):
Цитата:
Написать функцию, которая возвращает количество повторяющихся букв в строчке.
Прототип функции выглядит так:
code:
int repeatCharCount( char * str);
максимальная длина строки - 256 символов.
Повторяющимися буквами считаются любые идущие друг за другом символа, например
В строчке "" ответ будет 0
В строчке "PARE uueks esimeheks valiti TTÜ ärikorralduse instituudi külalisprofessor Milvi Tepp" ответ будет 5, по одному в словах uueks,ärikorraldus,instituudi, külalisprofessor, Tepp
В строчке "12458756422457765497333457!!4:::" ответ будет 7, ибо 22,77,333,!!,:::
И да, в строчке "12__34___5" ответ будет 3
Ввод данных из файла "CharCount.txt", вывод в файл "Out.txt" где на каждую строчку ввода будет соответствовать строчка с числом.
CharCount.txt
Цитата:
12__34___5
12458756422457765497333457!!4:::
PARE uueks esimeheks valiti TTÜ ärikorralduse instituudi külalisprofessor Milvi Tepp
Mama myla ramy
Out.txt
Цитата:
3
7
6
0
Отправлено Дядя Миша 24-02-2011 в 19:34:
Писал я нечто подобное покойному смалл-диксу.
ЗЫ. Осторожно realloc 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено DEAD MAN 24-02-2011 в 21:11:
Дядя Миша Ух, стена кода, да и ещё работа с памятью (чего мы пока не учили). Ладно, спасибо, буду курить, может смогу это в что-то более простое переписать.
Отправлено Дядя Миша 24-02-2011 в 21:15:
DEAD MAN ну я не умею писать просто, всегда руки чешутся апчхимизировать, а из-за этого страдает читабельность.
Да и реаллок еще этот...
Но сам код рабочий 100% и без утечек, я его на боундс-чекере отлаживал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Scrama 25-02-2011 в 03:36:
std::vector<char> 
__________________
"Злобным гениям не нужна харизма." © Shooter__Andy
"Making stuff for an "old ugly game" can be ten times more fun than grinding on a map for a dull, next-gen title." © Lunaran
Отправлено Qif_Qgame 27-02-2011 в 17:22:
Если прога еще нужна - вот версия попроще. Да и комментов понаписал - мама не горюй, понятно вроде должно быть любому.
C++ Source Code:
5 | #define maxline 256//максимальное количество символов в строке |
8 | int DoubleCount( char* Line ) //наша функция |
10 | int Counter=0, i; //Counter - счетчик пар |
11 | for ( i=1; Line[i]!=NULL; i++ ) //создаем цикл и посимвольно достаем из строки буквы |
13 | if ( Line[i]=='\n' ) //проверяем на символ конца строки |
14 | return Counter; //возвращаем значение счетчика если конец |
16 | if ( Line[i-1]==Line[i] ) Counter++; //сравниваем текущий и предыдущий символ |
18 | return Counter; //возвращаем значение счетчика |
24 | int DCount=0; //переменная для хранения количества пар в строке |
25 | char iLine[maxline]; //массив символов для хранения строки |
27 | if ((iFile=fopen("CharCount.txt", "r"))==NULL) //открываем файл, из которого считываем текст |
28 | { //и проверяем, открылся ли он |
29 | printf("ERROR OPENING FILE"); //если нет, то пишем мессагу |
33 | else oFile=fopen("Out.txt", "w"); //если да, то открываем файл для записи |
35 | while (fgets(iLine, maxline, iFile)!=NULL) //считываем строку в массив iLine размером maxline |
36 | { //из файла iFile. делаем до тех пор, пока нет конца файла |
37 | DCount = DoubleCount( iLine ); //записываем в DCount значение, возвращаемое нашей ф-цией |
38 | fprintf(oFile,"%d\n",DCount); //записываем в результирующий файл количество пар |
41 | fclose(iFile); //закрываем файлы |
43 | printf("Mission Complete!"); |
44 | getch(); //ждем от пользователя нажатия перед завершением программы |
Правда без табуляции комменты смотрятся жутковато %)__________________
При виде колоизации из дум3 Дядя Миша страшно кричит
Boom - круто! © Worker
[jqbros site]
Отправлено Дядя Миша 27-02-2011 в 17:28:
бьет Qif_Qgame по рукам. Не пиши макросы с нижнем регистре, не пиши макросы в нижнем регистре!
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Qif_Qgame 27-02-2011 в 18:30:
Пардон, ошибочка. Больше не буду.
__________________
При виде колоизации из дум3 Дядя Миша страшно кричит
Boom - круто! © Worker
[jqbros site]
Отправлено fire64 27-02-2011 в 18:50:
Дядя Миша, а кстати, почему ?
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено Дядя Миша 27-02-2011 в 19:02:
fire64 потому что их в таком случае легко перепутать с функциями.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено DEAD MAN 27-02-2011 в 19:43:
Qif_Qgame О, большое спасибо! Просто идеально. Мог не утруждать себя, не писать комментарии, я бы и так разобрался.
Отправлено DEAD MAN 13-03-2011 в 12:25:
И снова нуждаюсь в вас. Боюсь, что без чей-то помощи просто не осилю задание. Последний день сдачи - 31 марта.
Задание такое:
Цитата:
Генерируется матрица размером не меньше, чем 8 на 8, состоящая из 0 и 1 (в нашем случаи 0 - это пусто, 1 - есть мина). Единиц должно быть от 30% до 40% от всей матрицы. Выбирается случайная ячейка матрицы, на которую сбрасывается "парашютист". Этот "парашютист" может двигаться как Ладья в шахматах, но только на 1 клетку/ячейку за ход.
"Парашютист" делает шаг, проверяет клетку на наличие мины. Если мина есть - возвращается на предыдущую клетку, мины нет - остаётся на данной. В итоге"парашютист" должен найти выход из минного поля(или не найти, учень удивлюсь, если при случайной генерации выпадет так, что выход будет заблокирован) и вывести на экран результат о успешном завершении поиска. Функция поиска выхода, как я понял, должна быть рекурсивной. Так же программа должна выводить текущее положение "парашютиста" на матрице и состояние текущей клетки (есть мина/нет мины).
З.Ы. Программа всё ещё на том же C.
Отправлено Дядя Миша 13-03-2011 в 12:54:
Цитата:
DEAD MAN писал:
Генерируется матрица размером не меньше, чем 8 на 8, состоящая из 0 и 1
ну char matrix[8][8];
Цитата:
DEAD MAN писал:
Единиц должно быть от 30% до 40% от всей матрицы
for( x = 0; x < 8; x++ )
for( y = 0; y < 8; y++ )
{
matrix[x][y] = (rand() & 1) ? 0 : 1;
}
Я правда хз, тут скорее будет вероятность 50%.
Цитата:
DEAD MAN писал:
Выбирается случайная ячейка матрицы, на которую сбрасывается "парашютист".
x = rand() % 8;
y = rand() % 8;
Цитата:
DEAD MAN писал:
"Парашютист" делает шаг, проверяет клетку на наличие мины. Если мина есть - возвращается на предыдущую клетку, мины нет - остаётся на данной.
ну тут корочи разные способы могут быть, но самый простой - проверить все восемь ячеек вокруг себя и отдать приоритет той, которая ближе всего к 0 по x, нулю по y либо к 8 по x, 8 по y. Из этих четырех приоритетов некоторые отменяются, поскольку в одном из полей может оказаться мина *Внимание, здесь мины!!!".
Далее, если все предпочтительные поля заняты, делается следующий проход - поиск ЛЮБОГО свободного поля без мины. Как легко увидеть, у данного алгоритма есть жирный баг - при некотором стечении обстоятельств парашутист начнет метаться между двумя соседними клетками. Но для начала и это неплохо.
Цитата:
DEAD MAN писал:
Функция поиска выхода, как я понял, должна быть рекурсивной.
можно и рекурсивной, можно и просто в общем цикле вызывать MoveExecute();
sleep( 100 ); // ну чтоб не слишком быстро метался.
Цитата:
DEAD MAN писал:
Так же программа должна выводить текущее положение "парашютиста" на матрице и состояние текущей клетки (есть мина/нет мины).
это предалагается в числах выводить или прямо матрицу рисовать средствами консоли?
Второй вариант чуть сложнее, но зато более красивый =)__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено DEAD MAN 13-03-2011 в 15:30:
Дядя Миша Ну с генерацией матрицы и сбросом парашютиста я разобрался, это не сложно. Мне проблемы доставляет само написание этой рекурсивной функции (уточнил, надо делать рекурсию). Мне бы найти зачатки кода или псевдокод.
Цитата:
Дядя Миша писал:
рисовать средствами консоли
А есть команда, которая удаляет все записи в консоли? А так на самом деле достаточно только в численном виде выводить координаты.
Отправлено Дядя Миша 13-03-2011 в 17:49:
Цитата:
DEAD MAN писал:
А есть команда, которая удаляет все записи в консоли?
system( "@cls\n" );
не?__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'