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

C++

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

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

15.07.2010, 05:53. Просмотров 336478. Ответов 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
18.07.2010, 14:39     Задачи для тренировки и лучшего понимания #101
Цитата Сообщение от лендер Посмотреть сообщение
Сообщение от MikeSoft
Lavroff, вот вам ещё задачка ... здесь больше на логику.
Даны две переменных:
Код C++1
2 int a = 10;
int b = 25;
Не используя третью переменную добиться результата:
Код C++1
2 a = 25;
b = 10;
То есть, поменять значения местами.
У задачи существует как минимум три решения (может и больше, но мне в голову пришли три)
Т.к. 10 и 25 помещаются в 1 байт, то можно так:
C++
1
2
3
4
5
6
a<<8
a+=b;
b=a;
b&=0xFF00;
b>>8;
a&0xFF
правда код конечно длинее, нозача ж на логику)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
18.07.2010, 15:08
  #102

Не по теме:

Цитата Сообщение от MikeSoft Посмотреть сообщение
Даны две переменных:
C++
1
2
int a = 10;
int b = 25;
Не используя третью переменную добиться результата:
C++
1
2
a = 25;
b = 10;
C++
1
std::swap(a, b);
И хрен поспоришь

MikeSoft
Эксперт C++
 Аватар для MikeSoft
3787 / 1769 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
18.07.2010, 15:24     Задачи для тренировки и лучшего понимания #103
лендер, именно так!
CyBOSSeR, да, с этим трудно поспорить ...

Kastaneda, идея со сдвигом интересная, но в коде у вас небольшой недочёт при сдвиге. Работать будет так:

C++
1
2
3
4
5
6
a <<= 8;
a += b;
b = a;
b &= 0xFF00;
b >>= 8;
a &= 0xFF;
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
18.07.2010, 16:20     Задачи для тренировки и лучшего понимания #104
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main(){
  int a=10, b=25;
  a+=b;
  b=a-b;
  a-=b;
  std::cout << a << " " << b;
  return 0;
}
например
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
18.07.2010, 16:22     Задачи для тренировки и лучшего понимания #105
MikeSoft, да, точно, наверно от жары мозги плавиться начали))

Пол дня сижу на задачей про шахматы, не могу найти ошибку
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 16:23     Задачи для тренировки и лучшего понимания #106
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main(){
* int a=10, b=25;
* a+=b;
* b=a-b;
* a-=b;
* std::cout << a << " " << b;
* return 0;
}
например
неа, такой вариант уже был
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
18.07.2010, 16:24     Задачи для тренировки и лучшего понимания #107
Цитата Сообщение от nikkka Посмотреть сообщение
неа, такой вариант уже был
аа, дак оно не самое правильное?
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 16:26     Задачи для тренировки и лучшего понимания #108

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
MikeSoft, да, точно, наверно от жары мозги плавиться начали))
Пол дня сижу на задачей про шахматы, не могу найти ошибку
выложите, вместе подумаем



Добавлено через 1 минуту
alex_x_x, оно то правельное, просто такой вариант уже был...

Не по теме:

в суме "накопилось" 5 решений.
5, кто больше?

MikeSoft
Эксперт C++
 Аватар для MikeSoft
3787 / 1769 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
18.07.2010, 16:30     Задачи для тренировки и лучшего понимания #109
Цитата Сообщение от alex_x_x Посмотреть сообщение
аа, дак оно не самое правильное?
Правильно, конечно

Просто nikkka вёл к тому, что вариант уже был и интересно посмотреть, как можно ещё решить эту задачу.
Пару решений есть в этом посте: Задача для тренировки и лучшего понимания
nikkka
18.07.2010, 16:32
  #110

Не по теме:

Цитата Сообщение от MikeSoft Посмотреть сообщение
Просто nikkka вёл к тому, что вариант уже был и интересно посмотреть, как можно ещё решить эту задачу.
точниссимо

Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
18.07.2010, 16:46     Задачи для тренировки и лучшего понимания #111
а я ее решил
Задача про шахматы:
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
#include <iostream>    
using namespace std;
class Chess{
    int chessboard[9][9];
    public:
        Chess(){
             for(int i=0;i<9;i++)
                for(int j=0;j<9;j++)
                chessboard[i][j]=0;}
    void stephorse(int,int);
    bool correct (int,int);
    void somechessman(int,int);
    string operator^(Chess);
};
void Chess::stephorse (int a,int b){
     if(correct((a-2),(b+1)))
        chessboard[a-2][b+1]=1;
     if(correct((a-2),(b-1)))
        chessboard[a-2][b-1]=1;
     if (correct((a+2),(b-1)))
        chessboard[a+2][b-1]=1;
     if(correct((a+2),(b+1)))
        chessboard[a+2][b+1]=1;   
     if(correct((a+1),(b-2)))
        chessboard[a+1][b-2]=1;
     if(correct((a-1),(b-2)))
        chessboard[a-1][b-2]=1;
     if(correct((a-1),(b+2)))
        chessboard[a-1][b+2]=1;
     if(correct((a+1),(b+2)))
        chessboard[a+1][b+2]=1;         
     } 
bool Chess::correct(int a,int b){
    return (a>=1)&&(a<=8)&&(b>=1)&&(b<=8) ? true : false;
} 
void Chess::somechessman(int a,int b){
    chessboard[a][b]=1;
} 
string convert(int a,int b){
    string S;
    string mas[]={"0","A","B","C","D","E","F","G","H"};
    string ms[]={"0","1","2","3","4","5","6","7","8"};
    S=mas[a]+ms[b]+"\n";
    return S;
}   
string Chess::operator^(Chess b){
    string S;
    for(int i=0;i<9;i++)
       for(int j=0;j<9;j++)
           if((chessboard[i][j]==1)&&(b.chessboard[i][j]==0))
             S+=convert(i,j);      
     return S;
 } 
int deconvert(char a){
    char mas[]={'A','B','C','D','E','F','G','H'};
    for (int i=0;i<8;i++)
       if(mas[i]==toupper(a))
       return (i+1);
   }                              
int main (){  
   Chess white;
   Chess black;
   black.somechessman(deconvert('b'),7); //обозначаем черного коня на поле
   black.somechessman(deconvert('b'),3); //обозначаем пешку на поле
   black.somechessman(deconvert('e'),2); //обозначаем белого короля на поле
   black.somechessman(deconvert('h'),7); //обозначаем черного короля на поле
   white.stephorse(deconvert('c'),4); //просчитываем ходы белого коня
   black.stephorse(deconvert('b'),7); //просчитываем ходы черного коня
   cout<<"White horse can go to :"<<endl<<(white^black)<<endl;
system("pause");
return 0;    
}
Выводит:
White horse can go to :
A3
B2
B6
D2
E3
E5
Добавлено через 2 минуты
Вопрос к людям более опытным, почему вот в этом участке:
C++
1
2
3
4
5
6
7
class Chess{
    int chessboard[9][9];
    public:
        Chess(){
             for(int i=0;i<9;i++)
                for(int j=0;j<9;j++)
                chessboard[i][j]=0;}
Не получается сделать просто
C++
1
int chessboard[9][9]={0};
Компилятор на такое ругался.
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 16:51     Задачи для тренировки и лучшего понимания #112
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не получается сделать просто
Код C++
1
int chessboard[9][9]={0};
Компилятор на такое ругался.
нельзя писать chessboard[9][9]. не забывайте, отсчёт ведётся с нуля, по этому максимальный индекс 9-элементного массива 8.
поправьте, плиз если что :S
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
18.07.2010, 16:56     Задачи для тренировки и лучшего понимания #113
Цитата Сообщение от nikkka Посмотреть сообщение
нельзя писать chessboard[9][9]. не забывайте, отсчёт ведётся с нуля, по этому максимальный индекс 9-элементного массива 8.
поправьте, плиз если что :S
))Да это я знаю, я не про то. Почему не получается инициализировать массив нулями, а приходится делать это через цикл?
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
18.07.2010, 16:59     Задачи для тренировки и лучшего понимания #114
Цитата Сообщение от Kastaneda Посмотреть сообщение
))Да это я знаю, я не про то. Почему не получается инициализировать массив нулями, а приходится делать это через цикл?
а это вообще возможно??... : O
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
18.07.2010, 17:03     Задачи для тренировки и лучшего понимания #115
Вне класса это можно сделать именно так:
C++
1
int chessboard[9][9]={0};
А вот в классе почему так не получатся
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
18.07.2010, 17:07     Задачи для тренировки и лучшего понимания #116
Kastaneda,наверно это надо делать в конструкторе без аргументов, например.
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
18.07.2010, 17:10     Задачи для тренировки и лучшего понимания #117
Цитата Сообщение от besstiaa Посмотреть сообщение
Kastaneda,наверно это надо делать в конструкторе без аргументов, например.
А можно код? А то что-то мне кроме цикла ни чего в голову не лезет.
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
18.07.2010, 17:17     Задачи для тренировки и лучшего понимания #118
Kastaneda,просто предположение. Попробовать не на чем, так с массивом ранее не приходилось сталкиваться.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
18.07.2010, 17:22     Задачи для тренировки и лучшего понимания #119
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
int chessboard[9][9]={0};
Здесь ты проинициализировал нулем только нулевой элемент матрицы, остальные были проинициализированы значением по умолчанию, к счастью, тоже нулем.
Цитата Сообщение от Kastaneda Посмотреть сообщение
C++
1
2
3
for(int i=0;i<9;i++) 
  for(int j=0;j<9;j++) 
    chessboard[i][j]=0;}
Здесь нет инициализации - просто заполнение нулями.
Инициализация:
C++
1
2
3
4
5
int matrix[3][3] = {
  { 0, 0, 0 },
  { 0, 0, 0 },
  { 0, 0, 0 }
};
Цитата Сообщение от besstiaa Посмотреть сообщение
Kastaneda,наверно это надо делать в конструкторе без аргументов, например.
К сожалению, в C++ пока нет средств для инициализации массивов полей класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2010, 17:25     Задачи для тренировки и лучшего понимания
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
18.07.2010, 17:25     Задачи для тренировки и лучшего понимания #120
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
К сожалению, в C++ пока нет никаких средст для инициализации массивов полей класса.
однако как я понимаю при описании
int chessboard[9][9];
при конструировании объекта вызовется конструктор по умолчанию, что в данном случае означает заполнение нулями
Yandex
Объявления
18.07.2010, 17:25     Задачи для тренировки и лучшего понимания
Закрытая тема Создать тему
Опции темы

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