HLFX.Ru Forum Страницы (4): « 1 2 3 [4]
Показать все 60 сообщений этой темы на одной странице

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:
1
#include <conio.h>
2
#include <stdio.h>
3
#include <stdlib.h>
4
 
5
#define maxline 256//максимальное количество символов в строке
6
 
7
 
8
int DoubleCount( char* Line )				//наша функция
9
{
10
  int Counter=0, i;						//Counter - счетчик пар
11
  for ( i=1; Line[i]!=NULL; i++ )		//создаем цикл и посимвольно достаем из строки буквы
12
  {
13
    if ( Line[i]=='\n' )			//проверяем на символ конца строки
14
      return Counter;				//возвращаем значение счетчика если конец
15
 
16
    if ( Line[i-1]==Line[i] ) Counter++;	//сравниваем текущий и предыдущий символ
17
    }
18
    return Counter;						//возвращаем значение счетчика
19
  }
20
 
21
void main()
22
{
23
  FILE *iFile, *oFile;
24
  int DCount=0;							//переменная для хранения количества пар в строке
25
  char iLine[maxline];					//массив символов для хранения строки
26
 
27
  if ((iFile=fopen("CharCount.txt", "r"))==NULL)	//открываем файл, из которого считываем текст
28
  {												//и проверяем, открылся ли он
29
  printf("ERROR OPENING FILE");				//если нет, то пишем мессагу
30
  getch();
31
  exit (1);									//и выходим
32
}
33
else oFile=fopen("Out.txt", "w");				//если да, то открываем файл для записи
34
 
35
while (fgets(iLine, maxline, iFile)!=NULL)		//считываем строку в массив iLine размером maxline
36
{												//из файла iFile. делаем до тех пор, пока нет конца файла
37
DCount = DoubleCount( iLine );					//записываем в DCount значение, возвращаемое нашей ф-цией
38
fprintf(oFile,"%d\n",DCount);					//записываем в результирующий файл количество пар
39
}
40
 
41
fclose(iFile);									//закрываем файлы
42
fclose(oFile);
43
printf("Mission Complete!");
44
getch();										//ждем от пользователя нажатия перед завершением программы
45
}


Правда без табуляции комменты смотрятся жутковато %)

__________________
При виде колоизации из дум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'


Временная зона GMT. Текущее время 22:29. Страницы (4): « 1 2 3 [4]
Показать все 60 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024