С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/27: Рейтинг темы: голосов - 27, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5

Что делает функция

12.03.2008, 17:08. Показов 5084. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеется вот такая функция. Обясние пожалуйста что она делает? что ето за команды которые она использует и как они работают.
В интернете я о них что то мало чего нашел, а если и нашел то не понятно. Может можно как то упростить эту функцию?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int move( int disk, int from, int to)
     {
        char *str_pos = strchr( s[from], '-' ) ;
        
        if( str_pos == NULL )
          s[from][0] = 0 ;
        else
          strcpy( s[from], str_pos+1 ) ;
        if( s[to][0] == 0 )
          sprintf( s[to], "%d", disk ) ;
        else
        {
           strcpy( s[0], s[to] ) ;
           sprintf( s[to], "%d-%s", disk, s[0] ) ;
        }
        step++ ;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2008, 17:08
Ответы с готовыми решениями:

что делает функция?
int slength ( char*str){ int Len = -1; while (++len, *str++); return len; } возвращает длину строки? Добавлено через 42...

Что делает функция?
void countFrequency( const std::string & str, int *frequency ) //принимаем строку, и указатель на интовый массив { int idx; ...

Что делает функция strcpy(t, f)
Функция strcpy(t, f) что она делает?

10
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 18:41
ну начнем...))
move - функция, которая принимает три параметра типа int, и возвращает тоже int.
str_pos - указатель на тип char, который указывает на первое вхождение символа '-' строку s[form] (s - скорее всего глобальный массив указателей на тип char - массив строк), где form - номер строки. Если в строке s[form] не будет находиться символ '-', то функция strchr вернет NULL, следовательно, и str_pos тоже будет равен NULL.
Дальше идет проверка.
Если str_pos равен NULL, то есть в строке s[form] не обнаружено символа '-', то присвоить первому (то есть нулевому) символу строки s[form] значение NULL (0).
Иначе, с помощью функции strcpy, та часть строки s[form], которая идет за первым вхождением символа '-' в эту строку, копируется в строку s[form] (в самое начало строки, тоесть затирая её начало).
Идет еще одна проверка.
Если первый символ строки s[to] является 0 (NULL), то переменная disk запишется в строку s[to] как целое число без знака. Иначе, содержимое строки s[to] скопируется в строку s[0], и в строку s[to] запишется: переменная disk как целое число без знака, потом дефис и строка s[0].
Ну и в конце значение переменной step увеличится на 1.
Ну вот и все)) Правда функция не закончена, нету закрывающейся фигурной скобки в конце.
1
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:24  [ТС]
пасибо большое! стало немного понятнее. а как нибудь мозно упростить эту функцию?
0
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:33
ну вообще правильнее (если я верно понимаю задумку автора функции) писать вместо s[from][0] = 0 такую строку s[from]=NULL;
а так, вообще упростить её нельзя..
0
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:35  [ТС]
а если сделать аналогичную функцию, только другими коммандами?
0
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 19:39  [ТС]
или может аналогов этих комманд больше нету?
0
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:49
Цитата Сообщение от rolya Посмотреть сообщение
а если сделать аналогичную функцию, только другими коммандами?
Ну вот щас попробую, просто тут используются функции из библиотеки string,h, такие как strchr, strcpy, и функция sprintf - им замен не будет. Если конечно не написать свои собственные функции)))) Но можно заменить оперетор if else тернарной операцией ?.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int move( int disk, int from, int to)
{
char *str_pos = strchr( s[from], '-' ) ;
 
(str_pos == NULL)?(s[from][0] = 0):strcpy( s[from], str_pos+1 );
if( s[to][0] == 0 )
sprintf( s[to], "%d", disk ) ;
else
{
strcpy( s[0], s[to] ) ;
sprintf( s[to], "%d-%s", disk, s[0] ) ;
}
step++ ;
0
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 19:57
А еще можно вот так вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int move( int disk, int from, int to)
{
char *str_pos = strchr( s[from], '-' ) ;
 
(str_pos == NULL)?(s[from][0] = 0):strcpy( s[from], str_pos+1 );//применили тернарную операцию
(s[to][0] == 0)?sprintf( s[to], "%d", disk ):sprintf( s[to], "%d-%s", disk, strcpy(s[0], s[to]));//еще раз применили ьернарную операцию
step++ ;
 
sprintf( s[to], "%d-%s", disk, strcpy(s[0], s[to])); последним параметром функции sprintf является оператор strcpy(s[0], s[to]), так как он возвращает указатель на строку s[0], то он является заменой целому блоку
{
strcpy( s[0], s[to] ) ;
sprintf( s[to], "%d-%s", disk, s[0] ) ;
}
0
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 20:00
Ну и еще, только я не уверен в правильности работы этой функции можно сдеоать так:
C++
1
2
3
4
5
6
7
int move( int disk, int from, int to)
{
char *str_pos = strchr( s[from], '-' ) ;
 
(str_pos == NULL)?(s[from] = NULL):strcpy( s[from], str_pos+1 );
(s[to] == NULL)?sprintf( s[to], "%d", disk ):sprintf( s[to], "%d-%s", disk, strcpy(s[0], s[to]));
step++ ;
ну еще конечно, можно поменять имена переменным и самой функции))
0
0 / 0 / 0
Регистрация: 12.03.2008
Сообщений: 5
12.03.2008, 20:03  [ТС]
спасибо большое! вы выручили очень сильно. блин, а то я застопорился на одном месте и все, дальше и не знаю как делать. спасибо еше раз!
0
 Аватар для master.EXE
88 / 16 / 5
Регистрация: 10.03.2008
Сообщений: 101
12.03.2008, 20:07
Цитата Сообщение от rolya Посмотреть сообщение
спасибо большое! вы выручили очень сильно. блин, а то я застопорился на одном месте и все, дальше и не знаю как делать. спасибо еше раз!
Незачто)) Будут вопросы - обращайтесь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2008, 20:07
Помогаю со студенческими работами здесь

Что делает функция wsprintf?
Что делает функция wsprintf ? п.с. FillFoldersListBox принимает строку "A:\\0" (например) и деструктор нужного листбокса int...

Что делает эта функция?
func(x) { if (x == 0) { return 0 } return func(x / 10) + x % 10 }

Что делает эта функция?
Здравствуйте! У меня есть следующая функция, однако не совсем понимаю, что она делает. Кто-то может помочь? //n - любое натуральное...

Что делает функция weird_thing.
Что делает это функция? weird_thing()

Что делает функция length?
void main() { using namespace std; string st,stt; cout << "enter name files:" <<endl; char name; cin >> name; ifstream...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru