Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2744, средняя оценка - 4.89
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
#1

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

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

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

Список задач, решение которых присутствует в данной теме:
Лучшие ответы (59)
Сообщение: #857841 Сообщение: #857861 Сообщение: #858352 Сообщение: #859371 Сообщение: #860160 Сообщение: #860255 Сообщение: #860259 Сообщение: #860317 Сообщение: #860368 Сообщение: #860466 Сообщение: #860508 Сообщение: #860720 Сообщение: #861091 Сообщение: #862174 Сообщение: #862617 Сообщение: #867259 Сообщение: #870298 Сообщение: #872053 Сообщение: #876456 Сообщение: #880114 Сообщение: #882889 Сообщение: #884418 Сообщение: #886414 Сообщение: #886989 Сообщение: #887733 Сообщение: #888464 Сообщение: #888487 Сообщение: #888941 Сообщение: #888947 Сообщение: #889040 Сообщение: #889450 Сообщение: #889587 Сообщение: #891772 Сообщение: #891790 Сообщение: #891862 Сообщение: #897758 Сообщение: #897782 Сообщение: #906325 Сообщение: #907991 Сообщение: #943672 Сообщение: #943700 Сообщение: #967735 Сообщение: #1053777 Сообщение: #1054209 Сообщение: #1083853 Сообщение: #1083928 Сообщение: #1131058 Сообщение: #1131359 Сообщение: #1273743 Сообщение: #1275465 Сообщение: #1276743 Сообщение: #1279215 Сообщение: #1282583 Сообщение: #1309088 Сообщение: #1315633 Сообщение: #1366395 Сообщение: #1550164 Сообщение: #1603678 Сообщение: #1604364
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 05:53     Задачи для тренировки и лучшего понимания
Посмотрите здесь:

C++ Какой компилятор выбрать для лучшего изучения С++ по книге Берна Страуструпа?п
C++ Элементарные программы, для лучшего понимания языка...
Нужны задачи для тренировки C++
C++ Киньте задачки для тренировки
C++ Нужны простые задачи для тренировки
Нужны задачи для тренировки C++
На соревнованиях по фигурному катанию оценки заносятся в компьютер. Составить программу для вывода на экран лучшего результата после каждого выступлен C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
28.12.2010, 02:46  [ТС]     Задачи для тренировки и лучшего понимания #961
Доктор ТуамОсес, Даа... Дико прямой доступ...
Кат
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
#include <iostream>
 
class Base
{
public:
    Base():x(1)
    {
    }
    virtual int GetX() const=0;
protected:
    int x;
};
 
class Der:public Base
{
public:
    Der():Base()
    {
    }
private:
    int GetX() const {return x;}
};
 
int main()
{
    Base* first;
    first=new Der;
    std::cout<<first->GetX()<<'\n';
}

Но впринципе спасибо за задачу и ответ. Думал на тему виртуальности, но подумал раз сказано прямо - значит прямо.
Доктор ТуамОсес
Заблокирован
28.12.2010, 04:01     Задачи для тренировки и лучшего понимания #962
Так и есть. Используется "виртуальность".
Если в базовом классе вирт. метод объявить public, то даже если в классе-потомке его переопределить как приватный, то всё равно через указатель на базовый класс к этому приватному методу можно будет обратиться

Добавлено через 1 минуту
Т.е.

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
// 13:35 21 декабря 2010 г.
/* Вызов виртуальных функций класса-потомка из указателя на базовый класс */
#include <iostream>
using namespace std;
 
struct A {
    public :
    virtual void print (void){
        cout << "running virtual PUBLIC member-function 'print' of class 'A' " << endl ;
        return ;
    }
} ;
 
struct B : A {
    private :
    void print (void){
        cout << "running virtual PRIVATE member-function 'print' of class 'B' " << endl ;
        return ;
    }
 
} ;
 
int main() {
    B   b;
    A*  pA = &b ;
 
    // НАПРЯМУЮ вызываем приватный метод класса B
    pA->print() ;
    return 0 ;
}
Evg
Эксперт CАвтор FAQ
17292 / 5540 / 347
Регистрация: 30.03.2009
Сообщений: 15,083
Записей в блоге: 26
28.12.2010, 09:38     Задачи для тренировки и лучшего понимания #963
Доктор ТуамОсес, в постановке задачи ты говорил про "мемберы". Мне казалось, что таким термином обозначают только поля. Или методы тоже попадают в это понятие?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
28.12.2010, 09:40  [ТС]     Задачи для тренировки и лучшего понимания #964
Evg, Функции-члены, данные-члены => и то и другое - мемберы
Evg
Эксперт CАвтор FAQ
17292 / 5540 / 347
Регистрация: 30.03.2009
Сообщений: 15,083
Записей в блоге: 26
28.12.2010, 11:45     Задачи для тренировки и лучшего понимания #965
Цитата Сообщение от ForEveR Посмотреть сообщение
Evg, Функции-члены, данные-члены => и то и другое - мемберы
Будем знать. А то про "мемберы" пытался решить задачу исключительно в контексте полей
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
06.01.2011, 06:57  [ТС]     Задачи для тренировки и лучшего понимания #966
Олимп задачка.
В ЕГЭ по математике было решено не давать задач, в которых используются числа, большие 5, например, 6, 10 и т.п. (они теперь считаются трудными и не обязательными для изучения). Вводится уравнение. Требуется определить, можно ли его давать в ЕГЭ (в уравнении могут присутствовать любые символы-нецифры, а также натуральные числа).

Входные данные

Вводится одна строка без пробелов, состоящая из не более чем 100 символов.

В строке могут встречаться натуральные числа, а также нецифровые символы.

Выходные данные

Выведите слово YES заглавными латинскими буквами, если такое уравнение можно дать в ЕГЭ и NO в противном случае.

Входные данные


Выходные данные

2x+3=5


YES

3x+3=6


NO

x-10=3x+4


NO
Интересно увидеть методы решения. Сам решил - но самым простым способом вообщем-то.
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
06.01.2011, 11:19     Задачи для тренировки и лучшего понимания #967
ForEveR, я правильно понял, в качестве коэффициентов уравнения не может быть чисел, больших 5? Тогда тупо парсить строку на присутствие в ней чисел, больших 5. ИМХО ничего сложного, странно, что задача олимпиадная, обычно олимпиадные задачи в лоб не решаются...
NightmareZ
1339 / 562 / 37
Регистрация: 31.03.2009
Сообщений: 1,908
06.01.2011, 11:53     Задачи для тренировки и лучшего понимания #968
Цитата Сообщение от silent_1991 Посмотреть сообщение
ForEveR, я правильно понял, в качестве коэффициентов уравнения не может быть чисел, больших 5? Тогда тупо парсить строку на присутствие в ней чисел, больших 5. ИМХО ничего сложного, странно, что задача олимпиадная, обычно олимпиадные задачи в лоб не решаются...
1+2+3+4=x

NO

Цитата Сообщение от ForEveR Посмотреть сообщение
В ЕГЭ по математике было решено не давать задач, в которых используются числа, большие 5, например, 6, 10 и т.п.
Что по поводу отрицательных чисел?
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
06.01.2011, 12:10     Задачи для тренировки и лучшего понимания #969
NightmareZ, да, у меня тоже такая мысль появилась, на счёт суммы слагаемых, но я решил пока это оставить. Задачу это не усложняет, можно не просто вытаскивать из строки очередное число, а искать их сумму, пока она не превысит пять или пока не допарсим строку (причём при переходе через знак "равно" надо начинать отнимать извлечённые числа).
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
06.01.2011, 13:22     Задачи для тренировки и лучшего понимания #970
Кстати, нужно будет немного код усложнить. Делать проверку не только каждого символа в строке.
Например, 3х+у=24 .
Если проверять посимвольно - оно выбьет "ДА", в то время как 24 больше 5.
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
06.01.2011, 13:24     Задачи для тренировки и лучшего понимания #971
Алексaндр, само собой, никто о посимвольной обработке не говорил, сама фраза "парсинг арифметического выражения" уже не предполагает посимвольности.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
06.01.2011, 14:58  [ТС]     Задачи для тренировки и лучшего понимания #972
нет ребят. Сумма тут не причем.
И парсить там тоже ничего не надо. Решается тупо влоб даже не разбиением на лексемы... Хотя если распарсить может и красивше выйдет.

1+2+3+4=x
YES должно выводить
А вот
3x+y=24
NO
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
06.01.2011, 15:06     Задачи для тренировки и лучшего понимания #973
ForEveR, ну я и не разбиение как таковое имел ввиду - главное ведь вытащить из строки очередное число. А это уже какой-никакой парсинг.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
06.01.2011, 15:11  [ТС]     Задачи для тренировки и лучшего понимания #974
silent_1991, вцелом да) вариант-то напишешь?)
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
06.01.2011, 15:19     Задачи для тренировки и лучшего понимания #975
ForEveR, ща))

Добавлено через 5 минут
В лоб, думаю, так:

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
#include <stdio.h>
 
int main(void)
{
    char expr[101];
    int number;
    int i;
 
    fgets(expr, 101, stdin);
 
    for (i = 0; i < 100; ++i)
    {
        while ((expr[i] < '0' || expr[i] > '9') && i++ < 100);
 
        number = 0;
 
        while (expr[i] >= '0' && expr[i] <= '9')
            number = number * 10 + (expr[i++] - '0');
 
        if (number > 5)
        {
            printf("NO");
 
            return 0;
        }
    }
 
    printf("YES");
 
    return 0;
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
06.01.2011, 16:04  [ТС]     Задачи для тренировки и лучшего понимания #976
silent_1991, Чуть позже свой скину. И твой проверю

Добавлено через 18 минут
Прошло.
А вот мое.

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
#include <iostream>
#include <string>
       
int main()
{
      typedef std::string T_str;
      T_str str;
      std::cin>>str;
      const std::string digits="0123456789";
      for(size_t i=0; i<str.size(); ++i)
      {
      size_t idx=str.find_first_of(digits, i);
      if(idx == std::string::npos)
      {
      std::cout<<"NO\n";
      return 0;
      }
      if(!isdigit(str[idx+1]))
      {
          if(str[idx]-'0' > 5)
          {
               std::cout<<"NO\n";
               return 0;
          }
          else
            continue;
      }
      else
      {
          std::cout<<"NO\n";
          return 0;
      }
  }
  std::cout<<"YES\n";
  return 0;
}
Добавлено через 23 минуты
Убрал все лишнее. Стало так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
       
int main()
{
  typedef std::string T_str;
  T_str str;
  std::cin>>str;
  const std::string digits="0123456789";
  size_t idx=0;
  while((idx=str.find_first_of(digits, idx)) != std::string::npos)
  {
      if(isdigit(str[idx+1]) || str[idx]-'0' > 5)
      {
          std::cout<<"NO\n";
          return 0;
      }
      ++idx;
  }
  std::cout<<"YES\n";
  return 0;
}
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
06.01.2011, 19:15     Задачи для тренировки и лучшего понимания #977
ForEveR, ну я интуитивно был уверен, что STL здесь будет рулить. Но поскольку сам STL пока не знаю (в ближайшее время думаю заняться этим делом), то решил написать так, на чистом Си (давно ничего на нём не писал))) ).
NightmareZ
1339 / 562 / 37
Регистрация: 31.03.2009
Сообщений: 1,908
06.01.2011, 22:26     Задачи для тренировки и лучшего понимания #978
Цитата Сообщение от ForEveR Посмотреть сообщение
1+2+3+4=x
YES должно выводить
Почему это вдруг? x же больше 5.
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
06.01.2011, 22:29     Задачи для тренировки и лучшего понимания #979
NightmareZ, а суть не в том, чему равен икс... Главное, чтобы в самом выражении не содержалось числа, большего 5. Так что создатели егэ вполне могут считерить и дать уравнение типа 5x+5x+5x=5+5+3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2011, 22:33     Задачи для тренировки и лучшего понимания
Еще ссылки по теме:

C++ Какая база требуется для понимания C++?
C++ Нужен пример рекурсивной функции для понимания ее назначения и практической пользы
C++ Builder Прошу примеров для понимания INDY
Книги для тренировки/развития котелка и просто убийства времени C++
Дайте задания для тренировки C++

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

Или воспользуйтесь поиском по форуму:
NightmareZ
1339 / 562 / 37
Регистрация: 31.03.2009
Сообщений: 1,908
06.01.2011, 22:33     Задачи для тренировки и лучшего понимания #980
Цитата Сообщение от silent_1991 Посмотреть сообщение
NightmareZ, а суть не в том, чему равен икс... Главное, чтобы в самом выражении не содержалось числа, большего 5. Так что создатели егэ вполне могут считерить и дать уравнение типа 5x+5x+5x=5+5+3
Тогда это слишком тупо и просто.
Yandex
Объявления
06.01.2011, 22:33     Задачи для тренировки и лучшего понимания
Закрытая тема Создать тему
Опции темы

Текущее время: 00:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru