- Типы данных, переменные и константы
- Ввод с клавиатуры и вывод данных на экран
- Арифметические операции и комбинированные операторы
- Операторы выбора if и else в С++
- Оператор switch в С++
- Цикл for в C++
- Циклы while, do while, вложенные циклы
- Двумерные массивы C++
- Массивы в C++
- Функции в C++
- Указатели C++
- Указатель на указатель C++
- Классы в С++
Дополнительный сборник задач с решениями
На этой странице собраны все задачи по темам уроков, размещенных на нашем сайте. К каждой задаче прилагается наш вариант решения. Постарайтесь всё же решать их самостоятельно и только потом сравнивать наш исходный код со своим. “Хочешь научиться программировать – программируй”!
Больше практических заданий с решениями найдёте здесь.
Рекомендуем посетить Сайт для юных программистов – где вы найдете уроки по различным языкам программирования (в том числе для детей), 3D-моделированию, Linux и др.
Всем привет,нужна помощь в написании кода на Си для микро контролера С8051F38 с жк экраном ,нужно подключить к микро контролеру 7сигментное табло(общий анод) через кнопку,при включении на табло и на экране должно отображатся 0,при зажатии на кнопку должен пойти отсчет вперед до 9 с задержкой в 500мс,при отпускании кнопки табло сохраняет последнее показанное число ,при очередном зажатии отсчет продолжается с того места где остановился и так по кругу,отсчет должен отображатся паралельно и на жк экране с надписью Status:running зеленым цветом когда отсчет идет,и Status :stop красным когда останавливается,пробовал,но не получается
#include
#include
#include
#define BUTTON_PIN PB0
#define SEGMENT_A_PIN PD0
#define SEGMENT_B_PIN PD1
#define SEGMENT_C_PIN PD2
#define SEGMENT_D_PIN PD3
#define SEGMENT_E_PIN PD4
#define SEGMENT_F_PIN PD5
#define SEGMENT_G_PIN PD6
#define SEGMENT_PORT PORTD
#define SEGMENT_DDR DDRD
#define BUTTON_PORT PORTB
#define BUTTON_DDR DDRB
// Таблица символов для 7-сегментного индикатора (общий анод)
const unsigned char SEGMENT_DIGITS[] = {
0b00001000, // 0
0b00111110, // 1
0b00100100, // 2
0b00011100, // 3
0b01001110, // 4
0b01100100, // 5
0b01111000, // 6
0b00000110, // 7
0b01111110, // 8
0b01101100, // 9
};
// Переменные
volatile uint8_t current_digit = 0;
volatile uint8_t button_state_prev = 1; // Инициализация как “отпущена” для исключения ложных нажатий
void display_digit(uint8_t digit) {
SEGMENT_PORT = ~SEGMENT_DIGITS[digit]; // Инвертировать значения для общего анода
}
void update_display() {
display_digit(status == 0 ? 0 : current_digit);
}
void handle_button_press() {
if (status == 0) {
status = 1;
current_digit = 0;
} else {
current_digit = (current_digit + 1) % 16;
}
update_display();
}
void handle_button_release() {
if (status == 1) {
status = 0;
}
}
void setup() {
// Настройка кнопки как входа с подтягивающим резистором
BUTTON_DDR &= ~(1 << BUTTON_PIN);
BUTTON_PORT |= (1 << BUTTON_PIN);
// Настройка выводов сегментов как выходов
SEGMENT_DDR |= (1 << SEGMENT_A_PIN) |
(1 << SEGMENT_B_PIN) |
(1 << SEGMENT_C_PIN) |
(1 << SEGMENT_D_PIN) |
(1 << SEGMENT_E_PIN) |
(1 << SEGMENT_F_PIN) |
(1 << SEGMENT_G_PIN);
}
void loop() {
// Считывание состояния кнопки с обнаружением фронтов (volatile для обновления флага)
volatile uint8_t button_state = PINB & (1 << BUTTON_PIN);
// Обработка нажатия кнопки с обнаружением фронтов
if (!button_state && button_state_prev) {
handle_button_press();
}
// Обработка отпускания кнопки с обнаружением фронтов
if (button_state && !button_state_prev) {
handle_button_release();
}
// Обновление отображения
update_display();
// Задержка 500 мс (заменить на соответствующую функцию задержки)
_delay_ms(500);
// Обновление предыдущего состояния кнопки
button_state_prev = button_state;
}
int main() {
setup();
loop();
return 0;
}
помогите пожалуйста, через неделю у меня экзамен по с++ ещё я сломал палец что мне делать помогите научите меня прогроммировать ато я вашему сайту поставлю 1 звезду быстро помогите мне суки твари
Как прошел экзамен?
Дано натуральне число n (n <=100), ціле число k (k =+-1) і послідовність цілих чисел a1, a2, …, an. Здійснити циклічний зсув елементів послідовності на 1 позицію вправо (при k =1) або вліво (при
k = −1)
cpp
#include
class Matrix
{
public:
void setData()
{
if (arrBase != nullptr)
{
clearMatrix();
}
std::cin >> rows >> cols;
arrBase = new int* [rows];
for (int i = 0; i < rows; i++)
{
arrBase[i] = new int[cols];
}
int data;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j > data;
arrBase[i][j] = data;
}
}
arrInverted = new int* [cols];
for (int i = 0; i < cols; i++)
{
arrInverted[i] = new int[rows];
}
for (int i = 0; i < cols; i++)
{
for (int j = 0; j < rows; j++)
{
arrInverted[i][j] = arrBase[j][i];
}
}
}
void getData()
{
std::cout << " ~ ~ ~ arrBase ~ ~ ~ " << std::endl;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
std::cout << arrBase[i][j] << "\t";
}
std::cout << std::endl;
}
std::cout << std::endl;
std::cout << " ~ ~ ~ arrInverted ~ ~ ~ " << std::endl;
for (int i = 0; i < cols; i++)
{
for (int j = 0; j < rows; j++)
{
std::cout << arrInverted[i][j] << "\t";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
private:
void clearMatrix()
{
for (int i = 0; i < rows; i++)
{
delete[] arrBase[i];
}
delete[] arrBase;
arrBase = nullptr;
for (int i = 0; i < cols; i++)
{
delete[] arrInverted[i];
}
delete arrInverted;
arrInverted = nullptr;
}
int** arrBase = nullptr;
int** arrInverted = nullptr;
size_t rows;
size_t cols;
};
int main()
{
Matrix m;
m.setData();
m.setData();
m.setData();
m.getData();
return 0;
}