Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/2010: Рейтинг темы: голосов - 2010, средняя оценка - 4.88
В астрале
Эксперт С++
8022 / 4779 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
1

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

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

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

Список задач, решение которых присутствует в данной теме:
43
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2010, 05:53
Ответы с готовыми решениями:

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

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

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

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

1272
В астрале
Эксперт С++
8022 / 4779 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
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';
}

Но впринципе спасибо за задачу и ответ. Думал на тему виртуальности, но подумал раз сказано прямо - значит прямо.
0
Заблокирован
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 ;
}
0
Evg
Эксперт CАвтор FAQ
21115 / 8131 / 628
Регистрация: 30.03.2009
Сообщений: 22,447
Записей в блоге: 30
28.12.2010, 09:38 963
Доктор ТуамОсес, в постановке задачи ты говорил про "мемберы". Мне казалось, что таким термином обозначают только поля. Или методы тоже попадают в это понятие?
0
В астрале
Эксперт С++
8022 / 4779 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
28.12.2010, 09:40  [ТС] 964
Evg, Функции-члены, данные-члены => и то и другое - мемберы
0
Evg
Эксперт CАвтор FAQ
21115 / 8131 / 628
Регистрация: 30.03.2009
Сообщений: 22,447
Записей в блоге: 30
28.12.2010, 11:45 965
Цитата Сообщение от ForEveR Посмотреть сообщение
Evg, Функции-члены, данные-члены => и то и другое - мемберы
Будем знать. А то про "мемберы" пытался решить задачу исключительно в контексте полей
0
В астрале
Эксперт С++
8022 / 4779 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
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
Интересно увидеть методы решения. Сам решил - но самым простым способом вообщем-то.
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
06.01.2011, 11:19 967
ForEveR, я правильно понял, в качестве коэффициентов уравнения не может быть чисел, больших 5? Тогда тупо парсить строку на присутствие в ней чисел, больших 5. ИМХО ничего сложного, странно, что задача олимпиадная, обычно олимпиадные задачи в лоб не решаются...
0
1459 / 629 / 62
Регистрация: 31.03.2009
Сообщений: 2,027
06.01.2011, 11:53 968
Цитата Сообщение от silent_1991 Посмотреть сообщение
ForEveR, я правильно понял, в качестве коэффициентов уравнения не может быть чисел, больших 5? Тогда тупо парсить строку на присутствие в ней чисел, больших 5. ИМХО ничего сложного, странно, что задача олимпиадная, обычно олимпиадные задачи в лоб не решаются...
1+2+3+4=x

NO

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

1+2+3+4=x
YES должно выводить
А вот
3x+y=24
NO
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
06.01.2011, 15:06 973
ForEveR, ну я и не разбиение как таковое имел ввиду - главное ведь вытащить из строки очередное число. А это уже какой-никакой парсинг.
0
В астрале
Эксперт С++
8022 / 4779 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
06.01.2011, 15:11  [ТС] 974
silent_1991, вцелом да) вариант-то напишешь?)
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
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;
}
0
В астрале
Эксперт С++
8022 / 4779 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
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;
}
1
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
06.01.2011, 19:15 977
ForEveR, ну я интуитивно был уверен, что STL здесь будет рулить. Но поскольку сам STL пока не знаю (в ближайшее время думаю заняться этим делом), то решил написать так, на чистом Си (давно ничего на нём не писал))) ).
0
1459 / 629 / 62
Регистрация: 31.03.2009
Сообщений: 2,027
06.01.2011, 22:26 978
Цитата Сообщение от ForEveR Посмотреть сообщение
1+2+3+4=x
YES должно выводить
Почему это вдруг? x же больше 5.
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
06.01.2011, 22:29 979
NightmareZ, а суть не в том, чему равен икс... Главное, чтобы в самом выражении не содержалось числа, большего 5. Так что создатели егэ вполне могут считерить и дать уравнение типа 5x+5x+5x=5+5+3
0
1459 / 629 / 62
Регистрация: 31.03.2009
Сообщений: 2,027
06.01.2011, 22:33 980
Цитата Сообщение от silent_1991 Посмотреть сообщение
NightmareZ, а суть не в том, чему равен икс... Главное, чтобы в самом выражении не содержалось числа, большего 5. Так что создатели егэ вполне могут считерить и дать уравнение типа 5x+5x+5x=5+5+3
Тогда это слишком тупо и просто.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2011, 22:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
980
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.