Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/2345: Рейтинг темы: голосов - 2345, средняя оценка - 4.54
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Задачи для тренировки и лучшего понимания

15.07.2010, 05:53. Показов 513906. Ответов 1272
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят. Кто-нибудь может дать задачу для тренировки? Приблизительно по всему курсу С++. Буду благодарен за сложную задачу, но которую способен сделать новичок-любитель. Затраты сил-времени не важно. Главное, чтобы это было интересно и не слишком рутинно. + Если найдется человек который даст задачу просьба помогать с кодом, который я буду себя скидывать. Не переписывать за меня, но указывать на ошибки и желательно объяснять. Заранее спасибо.

Список задач, решение которых присутствует в данной теме:
44
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2010, 05:53
Ответы с готовыми решениями:

Элементарные программы, для лучшего понимания языка...
Здравствуйте. Вот сегодня решил что пора изучать с++. Есть пару задач. Начал решать и уже на первой запоролся( суть в том чтобы определить...

Задачи для тренировки и лучшего понимания языка
Предлагаю в этой теме размещать задачи, которые помогут новичкам (и не только) более детально разобраться в основах языка. При размещении...

Литература для лучшего понимания сути программирования
Привет! Подскажите литературу, которая поможет разобраться в сути самого процесса программирования, поможет изучить теорию алгоритмов,...

1272
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.08.2010, 15:49  [ТС]
Студворк — интернет-сервис помощи студентам
М... С алгоритмами-то тему будет создавать/думать?
ЗЫ Задачки то еще будут? + интересны другие способы написания C или C++ в зависимости от типа файла
0
04.08.2010, 15:53

Не по теме:

Цитата Сообщение от Lavroff Посмотреть сообщение
С алгоритмами-то тему будет создавать/думать?
надо чтобы каждый предложил по алгоритму и выбрать самый интересный :)
или же пусть кто-нибудь из тех кто "постарше" проявит жесткую инициативу. потому что я лично в большинстве случаев только со стандартными и всем известными сталкивался.

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.08.2010, 15:59  [ТС]

Не по теме:

fasked, Вцелом аналогично. Обычно такие алгоритмы наиболее ходовые и есть.



Нестандартная реализация программы перевода из арабских чисел в римские:

C#
1
2
3
4
5
6
7
8
9
10
11
public static final String arab2Roman(int arab){
    String res=new String();
    String arab_str=String.valueOf(arab % 4000); 
    for (int d,dd5,i2= 0,i3=0,j=arab_str.length()-1; j>=0;i2+=2,i3+=3,j--){         
       d = (arab_str.charAt(j))-(char)'0';
       dd5=i2+((d+3)>>3);
       res=((d!=4 && d!=9) ? vld.substring(i2,dd5)+ ixcm.substring(i3, i3+d % 5) 
       : new String(new char[] {ixcm.charAt(i3), vld.charAt(dd5)}))+res;             
    }
  return res;
}
© Govnokod
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
04.08.2010, 17:05
Варианты тестов с различным поведением Си и Си++
  1. В Си если мы имеем тип "struct s", то к нему можем обращаться только через "struct s", а в Си++ можно через "s".

    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    #include <stdio.h>
     
    int x[1111];
     
    int
    main (void)
    {
      struct x {int a;} s;
     
      if (sizeof (x) == sizeof (s))
        printf("lang=C++\n");
      else
        printf("lang=C\n");
      return 0;
    }
  2. Здесь на 100% не уверен, надо стандарты читать. Но вроде бы дело было такое. В двухаргументных операциях с разными типами аргументов приведение типа делается для "более короткого" типа к "более длинному". Далее идут пояснения, что такое "более длинный". В случае целых типов одного размера, беззнаковый тип является более длинным. Но с битовыми полями немного сложнее. В Си считается, что битовое поле трактуется как обычная переменная этого же типа, а потому битовое поле типа unsigned размера 3 считается "более широким", чем 32-битная переменная типа int (потому что сравнение идёт через типы). А в Си++ сначала идёт честное сранение размеров, а потому битовое поле размера 3 всегда более короткое чем переменная размера 32 (независимо от знаковости типов). Или что-то типа того. Как уже гвоорил, на 100% не уверен

    Кстати, я поторопился назвать этот способ честным. Тут есть всякие unspecified случаи (то как приведение отрицательного значения к беззнаковому типу).

    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    #include <stdio.h>
     
    struct { unsigned d:3; } s = { 7 };
    unsigned sd = 7;
     
    main()
    {
      int x = -1;
      int p1, p2;
     
      p1 = x < s.d;
      p2 = x < sd;
     
      printf("%d %d\n", p1, p2);
    }
    Code
    1
    2
    3
    4
    5
    
    $ g++ t.c ; ./a.out
    0 0
     
    $ gcc t.c ; ./a.out
    1 0
  3. В Си++ есть комментарии через "//", а в Си нет

    C
    1
    2
    
    a = b //**/ c
        + d;
    Компилятор Си два слеша как комментарий не должен воспринимать, а потому комментарием будет "/**/" и выражение будет "b / c + d". А компилятор Си++ два слэша воспримет как комментарий, а потому выражение будет "b + d".

    Решение назвал теоретически честным, потому что, например, gcc в режиме Си так же воспринимает "//".

  4. С точки зрения Си++ переменные "int x" и "const int x" - это две разные переменные. Тест состоит из двух файлов

    C
    1
    
    const int x = 1;
    C
    1
    2
    
    int x;
    int main() { return x; }
    В режиме Си два объекта "x" должны быть одним и тем же. В Си разрешено линковать инициализированный и неинициализированный объекты содним именем. В итоге после линковки будет одна переменная "x", которая статически проинциализирована единицей. В режиме Си++ после линковки будут две переменные "x": одна инициализирована единицей (const int x), адругая - нулём (int x), поскольку глобальные неинициализированные объекты инициализируются нулём

Добавлено через 58 минут
Цитата Сообщение от fasked Посмотреть сообщение
почему же неправильно, если в Си sizeof('a') == sizeof(int), а в Си++ sizeof('a') == sizeof(char)
Но sizeof(char) может быть равен sizeof(int). Например, это имеет место быть на некоторых сигнальных процессорах
12
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
05.08.2010, 14:30  [ТС]
Вот. Сам ее решил не писать, ибо было впадлу)

Траектория черепахи
Траектория черепахи:

(Траектории черепахи) Язык Лого, особенно популярный среди пользователей персональных компьютеров, сделал известной идею траекторий черепахи. редставьте себе механическую черепаху, которая ползает по комнате под управлением программы на C++. Черепаха несет пишущее перо, которое может находиться в одной из двух позиций — нижней или верхней. Если перо в нижней позиции, черепаха вычерчивает траекторию движения, если в верхней, то черепаха передвигается свободно и ничего не вычерчивает. В этой задаче вы будете моделировать действия черепахи и создавать компьютеризованный эскиз пути. Используйте массив floor размером 20 на 20 с нулевыми начальными условиями. Считывайте команды из содержащего их массива. Все время отмечайте текущую позицию, черепахи и положение пера — нижнее или верхнее. Предполагайте, что черепаха всегда стартует из позиции О, О на полу с верхним положением пера. Ваша программа должна подавать команды черепахе в соответствии со следующими обозначениями:
Команда
1 - перо вверх
2 - перо вниз
3 - поворот направо
4 - поворот налево
5, 10 - передвижение вперед на 10 шагов
6 - печать массива 20 на 20
9 - конец данных (сигнальная метка)

Предположим, что черепаха находится где-то возле центра комнаты. Следующая «программа управления черепахой» начертила бы квадрат 12 на 12 и оставила бы перо в верхней позиции:
2
5,12 '
3
5,12
3
5,12
3
5,12
1
6
9
Если черепаха передвигается с пером, находящимся в нижней позиции, устанавливайте соответствующие элементы массива floor равными 1. При подаче команды 6 (печать) отображайте звездочкой или каким-либо другим символом все значения 1 в массиве, где бы они ни были. Все нули, где бы они ни были, отобразите пробелами. Напишите программу, реализующую рассмотренные возможности отображения траектории передвижения черепахи. Добавьте другие команды для повышения мощности вашего языка управления траекторией черепахи.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
05.08.2010, 15:18
Цитата Сообщение от Lavroff Посмотреть сообщение
Траектория черепахи
^__^
C++
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <utility>
#include <string>
#include <iostream>
#include <cstdlib>
 
class Tortoise
{
public:
    
    Tortoise(const std::string &name) : m_pos(0, 0),
                                        m_name(name),
                                        m_stylus(false)
    {
        for(int i = 0; i < m_xsize; ++i)
            std::fill_n(m_floor[i], m_ysize, ' ');
    }
 
    void MoveUp()
    {
        if(m_pos.second + 1 < m_ysize)
            ++m_pos.second;
 
        DrawPath();
    }
 
    void MoveDown()
    {
        if(m_pos.second - 1 >= 0)
            --m_pos.second;
 
        DrawPath();
    }
 
    void MoveLeft()
    {
        if(m_pos.first - 1 >= 0)
            --m_pos.first;
 
        DrawPath();
    }
 
    void MoveRight()
    {
        if(m_pos.first + 1 < m_xsize)
            ++m_pos.first;
 
        DrawPath();
    }
 
    std::pair<int, int> GetPosition() const
    {
        return m_pos;
    }
 
    bool GetStylusState() const
    {
        return m_stylus;
    }
 
    void SetStylusState(bool state)
    {
        m_stylus = state;
    }
 
    std::ostream& PrintFloor(std::ostream& os) const
    {
        for(int i = 0; i < m_xsize; ++i)
            os << "+ ";
        os << std::endl;
 
        for(int i = 0; i < m_xsize; ++i)
        {
            os << "+ ";
 
            for(int j = 0; j < m_ysize; ++j)
            {
                if(i == m_pos.first && j == m_pos.second)
                    os << 'x' << ' ';
                else
                    os << m_floor[i][j] << ' ';
            }
 
            os << "+" << std::endl;
        }
 
        for(int i = 0; i < m_xsize; ++i)
            os << "+ ";
        os << std::endl;
 
        return os;
    }
 
private:
 
    void DrawPath()
    {
        if(GetStylusState())
            m_floor[m_pos.first][m_pos.second] = '*';
    }
 
    const static size_t m_xsize = 20;   // size of floor
    const static size_t m_ysize = 20;   // x and y
 
    std::string m_name;                 // name of tortoise ^^
    std::pair<int, int> m_pos;          // cuurent coordinates
    bool m_stylus;                      // if true - on top, if false - at the bottom
 
    char m_floor[m_xsize][m_ysize];     // floor :)
};
 
 
int main()
{
    Tortoise kim("Kimberly");
    kim.SetStylusState(true);
 
    for(int i = 0; i < 20; ++i)
    {
        int step = rand() % 4;
        
        switch (step)
        {
        case 0: kim.MoveDown(); break;
        case 1: kim.MoveLeft(); break;
        case 2: kim.MoveRight(); break;
        case 3: kim.MoveUp(); break;
        }
    }
 
    kim.PrintFloor(std::cout);
 
    system("PAUSE");
    return 0;
}
2
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.08.2010, 15:20
Напишите интерпретатор языка HQ9+
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
05.08.2010, 16:09
На ACM контестерах уйма задач, выбирайте какаю хотите.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.08.2010, 16:45
Цитата Сообщение от Nameless One Посмотреть сообщение
Напишите интерпретатор языка HQ9+
"Чего только не придумают, лишь бы картошку не копать" (c)
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
05.08.2010, 17:27
Цитата Сообщение от outoftime Посмотреть сообщение
На ACM контестерах уйма задач, выбирайте какаю хотите.
Предлагал уже, чем-то не нравятся.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.08.2010, 17:46
очень желательно решить без компилятора
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
struct A
{
    A(): i(1){}
    int i;
};
struct B : A
{
    B(): j(2){}
    int j;
};
int main()
{
    A *p = new B[10];
    A *q = p;
    int total = 0;
    for (int i = 0; i < 10; ++i)
    {
        total += q++->i;
    }
    std::cout << total << std::endl;
    //чему равна переменная total в этом участке кода?
    delete [] p;
}
2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
05.08.2010, 17:56
Цитата Сообщение от niXman Посмотреть сообщение
очень желательно решить без компилятора
ничего не понял... был уверен, что 10 получится, скомпилил - 15... с какого перепуга?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.08.2010, 18:01
Цитата Сообщение от easybudda Посмотреть сообщение
скомпилил - 15
рано вы ответ дали

Цитата Сообщение от easybudda Посмотреть сообщение
с какого перепуга?
думаем..
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
05.08.2010, 18:03
Цитата Сообщение от easybudda Посмотреть сообщение
ничего не понял... был уверен, что 10 получится, скомпилил - 15... с какого перепуга?
таже фигня, получается что половина массива это тип А, а половина массива тип В
при чем именно через один.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.08.2010, 18:09
B - это массив из десяти элементов. каждый элемент - это объект(класс)-потомок от A. собственные поля у B - это поле j, помимо этого достается поле от A - это i. смотрим далее: q - это указатель изначально на B[0]. при q++ мы переходим на размер, занимаемый типом элемента массива. в типе класса B описана только одна переменная, а элемент массива содержит две переменные (j и i), значит мы перейдем к ее значению. в адресном пространстве сначала располагаются поля родительского класса, потом потомка. после десяти повторений получаем, что total=1+2+...=15

вот такие чудеса
11
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.08.2010, 18:18
Цитата Сообщение от niXman Посмотреть сообщение
B - это массив из десяти элементов. каждый элемент - это объект(класс)-потомок от A. собственные поля у B - это поле j, помимо этого достается поле от A - это i. смотрим далее: q - это указатель изначально на B[0]. при q++ мы переходим на размер, занимаемый типом элемента массива. в типе класса B описана только одна переменная, а элемент массива содержит две переменные (j и i), значит мы перейдем к ее значению. в адресном пространстве сначала располагаются поля родительского класса, потом потомка. после десяти повторений получаем, что total=1+2+...=15

вот такие чудеса
Немножко не так. q++ сдвигает указатель на один int не потому, что в B объявлена одна переменная, а потому, что он указатель на структуру A, размер которой int.
5
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
05.08.2010, 18:22
Цитата Сообщение от Mr.X Посмотреть сообщение
Немножко не так. q++ сдвигает указатель на один int не потому, что в B объявлена одна переменная, а потому, что он указатель на структуру A, размер которой int.
те же яйца, только в профиль.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.08.2010, 18:26
Цитата Сообщение от niXman Посмотреть сообщение
те же яйца, только в профиль.
Ну почему же. Если в строках 15 и 16 тип A заменить на B, то выведет 10.
0
05.08.2010, 18:30

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
Напишите интерпретатор языка HQ9+
Ржачный язык прогаммирования :D

0
05.08.2010, 18:38

Не по теме:

easybudda, это еще что... Взять хотя бы INTERCAL, paranoid или тот же LOLCODE :D...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.08.2010, 18:38

Набор задачь для тренировки и улучшения понимания программирования
Добрый вечер всем. Если кто знает модскажите где можно найти подобный набор задачь...

Проверить на правильность и закомментировать весь код для лучшего понимания
Всем здравствуйте. Условие задачи - Заданная матрица целых чисел размером (N, N). Найти среднее арифметическое элементов в окрашенной...

Нужны задачи для тренировки
Киньте задачки на классы......а то в самоучителе, по которому я учу Сишку....приведены задачки, касающиеся только математики.....сами...

Нужны задачи для тренировки
Здравствуйте киньте пожалуйста задания по с++ для человека начинающего изучать Turbo с++

Нужны задачи для тренировки
Вот не давно был школьный этап по программирование в школе(олимпиады). Меня закинули на городскую, вот только писал ту олимпиаду на...


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

Или воспользуйтесь поиском по форуму:
580
Закрытая тема Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru