Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Динамические структуры данных (Список), Задача 
V
    Опции темы
Voovan
Дата 26.3.2010, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 19.12.2009

Репутация: нет
Всего: -2



Вечер добрый. 
Нужна помощь. Задача такова: Написать программу, которая циклически выводит ФИО со смещением на один символ (бегущая строка):

Тоесть получается что-то вида: 
"
Иванов Иван Иванович
чИванов Иван Иванови
ичИванов Иван Иванов
........
вановичИванов Иван И
"

Необходимо все это реализовать с помощью зацикленного односвязного списка.
Заранее благодарен хоть в малейшей помощи.

PM MAIL   Вверх
world
Дата 26.3.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 2.10.2009
Где: Харьков

Репутация: 6
Всего: 12



Держи.

Код

#include <list>
#include <iostream>
#include <conio.h>
#include <cstdlib>
using namespace std;

int main(int argc, char* argv[])
{
    list<char> x;
    cout << "Vvedite text\n";
    char* a = new char[80];
    cin.getline(a, 80);
    int length = strlen(a);
    for(int i = 0; a[i] != '\0'; i++)
    {
        x.push_back(a[i]);
    }
    for(int i = 0; i < length + 1; i++)
    {
        for(list<char>::iterator j = x.begin(); j != x.end(); j++)
        {
            cout << *j;
        }
        cout << endl;
        char tmp = x.front();
        x.pop_front();
        x.push_back(tmp);
    }
    delete[] a;
    getch();
    return 0;
}


Это сообщение отредактировал(а) world - 27.3.2010, 15:02
--------------------
Say what you mean, and mean what you say. Robert Wilson Cody
PM MAIL WWW ICQ Skype   Вверх
Voovan
Дата 27.3.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 19.12.2009

Репутация: нет
Всего: -2



Спасибо, но чето она у меня не копилится пишет:
error: '_TCHAR' has not been declared
error: ISO C++ forbids declaration of 'argv' with no type 

Это сообщение отредактировал(а) Voovan - 27.3.2010, 12:02
PM MAIL   Вверх
world
Дата 27.3.2010, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 2.10.2009
Где: Харьков

Репутация: 6
Всего: 12



Забыл, что писал в MSVS с подключённым tchar.h.

Исправь 7 строчку на
Код

int main(int argc, char* argv[])


Исправил в первом посте
--------------------
Say what you mean, and mean what you say. Robert Wilson Cody
PM MAIL WWW ICQ Skype   Вверх
Voovan
Дата 27.3.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 19.12.2009

Репутация: нет
Всего: -2



Спасибо огромнейшее добряк=))) надеюсь не показаться совсем обнаглевшим, если тебя конечно же это не затруднит, не мог бы ты раскоментировать каждую строчку?)))
PM MAIL   Вверх
world
Дата 27.3.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 2.10.2009
Где: Харьков

Репутация: 6
Всего: 12



Та ладно, привык уже объяснять каждую строчку программы smile .

первые 4 строчки подключение заголовочных файлов (буду объяснять только те методы, кот. используются в программе)
1. list заголовочній файл, который содержит описание списка и методы для работы с ним
2. iostream заголовочный файл, который обеспечивает потоковый ввод-вывод(cin, cout)
3. conio.h заголовочный файл для работы с консольным вводом, нам из него понадобилась функция getch()
4. cstdlib стандартная библиотека С, нам из неё понадобилась функция strlen(char*)
5. Указываем, что будем работать в пространстве имён std
7. Объявление главной функции программы 
Подробней про 5 и 7 строчки отправлю тебя опять к моему посту в http://forum.vingrad.ru/index.php?showtopi...t&p=2081939
9. Объявляем переменную x типа list<char> (список в котором каждый элемент имеет тип char)
10. Выводим строку-приглашение к работе (Vvedite text)
11. Создаём указатель на массив символов размером 80 элементов (в этот указатель мы считаем строку введённую пользователем, а 80 элементов выбрано потму, что имено столько символов может поместиться в строке стандартного консольного окна)
12. Вобщем-то считываем строку(но не более 80 символов!)
13. Создаём переменную length в которой будем хранить РЕАЛЬНОЕ количество считанных элементов (длина строки записаной по адресу указателя а)
14. Обрабатываем строку посимвольно, порка не дойдём до признака конца строки (символ '\0')
   16. Записываем очередной символ в конец списка
18. Выполняем цикл, количество элементов в строке + 1 раз(можно менять, тогда изменяется количество шагов, кот. делает бегущая строка).
   20. Создаём указатель на начало массива и перемещаемся по одному жэлементу пока, не дойдём до последнего элемента списка
      22. Выводим символ, на который указывает указатель (фактически выводим всю строку по-символьно)
   24. Совершаем переход на новую строку.
   25. Сохраняем значение первого элемента списка.
   26. Удаляем первый элемент списка.
   27. Записываем соранённое значение бывшего первого элемента списка в конец списка (да масло маслянное получилось, но по-другому объяснить не могу)
29. Освобождаем память из-под массива в котором мы хранили значение, которое считали из строки(при завершении работы функции это произойдёт автоматически, но удаление динамически созданных объектов памяти(через new) програмистом является хорошим тоном програмирования)
30. Делаем задержку консольного окна (что-бы не закрывалось сразу после завершения работы функции). Сама функция getch() принимает один символ введённый с клавиатуры.
31. Возвращаем код возврата 0, и завершаем работу.

Это сообщение отредактировал(а) world - 27.3.2010, 16:49
--------------------
Say what you mean, and mean what you say. Robert Wilson Cody
PM MAIL WWW ICQ Skype   Вверх
fantazer3333
Дата 28.3.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 27.3.2010

Репутация: нет
Всего: нет



А можете написать такую же программу только на простом С?
PM MAIL   Вверх
Dov
Дата 31.3.2010, 01:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



"Бегущая строка" должна, как минимум, "бежать"...  smile 
Код
void printLine(char * buf)
{
    char * str = strdup(buf);
    int    len = strlen(str);

    puts("Press any key to quit...\n");
    while(!_kbhit())
    {
        printf("\r%s", str);
        
        char tmp = str[0];
        for(int i = 0; i < len - 1; i++)
            str[i] = str[i + 1];
        str[len - 1] = tmp;
        
        Sleep(200);
    }

    free(str);
    puts("");
}

int main()
{
    printLine("Ivanov Ivan Ivanovich ");
    _getch();

    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1066 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.