Прихований текст
grecigor11 написав:

У мене є шаблон, який приймає тривимірний масив для знаходження максимуму. Суть завдання полягає в тому, що цей шаблон повинен знаходити максимум і в одновимірному масиві. У нас додається змінна char question if question = '1' = тривимірний, якщо 2, то одновимірний.

Ось мій шаблон -

Прихований текст
template<typename T2>
T2 maxShablon2(T2 ***arr, const int n) {
    int max = arr[0][0][0];
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            for (int k = 0; k < n; ++k) {
                if (arr[i][j][k] > max) {
                    max = arr[i][j][k];
                }
            }
        }
    }
    cout << " Our max: " << max;
}

У чому власне проблема? Крім того Ваш шаблон, для 3-вимірного масиву, працює не правильно.

Прихований текст
#include <iostream>
using namespace std;

template<typename T> T max_a3d_t(T arr[][3][3], const size_t TABS)
{
    T max = arr[0][0][0];

    for (size_t t = 0; t < TABS; ++t)
        for (size_t r = 0; r < 3; ++r)
            for (size_t c = 0; c < 3; ++c)

                if (arr[t][r][c] > max)
                    max = arr[t][r][c];

    return max;
}

int main() {

    int a3d[3][3][3] = {
       
        // Таблиця # 0
       {{11, 12, 13},
        {14, 15, 16},
        {17, 18, 19}},

        // Таблиця # 1
       {{21, 22, 23},
        {24, 25, 26},
        {27, 28, 29}},

        // Таблиця # 2
       {{31, 32, 33},
        {34, 35, 36},
        {37, 38, 39}}
    };

    int m = max_a3d_t(a3d, 3);
    cout << "Our max: " << m << endl;

    return 0;
}

А для того, щоб шукало максимуми в одновимірних та багатовимірних масивах, потрібно або перезавантаження шаблону, або представляти багатовимірний масиви, як одновимірний

Прихований текст
#include <iostream>
using namespace std;

template<typename T> T max_aNd_t(T* p, const size_t SIZE)
{
    T max = *p;

    for (size_t id = 0; id < SIZE; ++id)

        if (*(p + id) > max)
            max = *(p + id);

    return max;
}

int main() {

    int* parr;
    int a1d[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int a2d[2][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8}
    };
    int a3d[3][3][3] = {
       { {11, 12, 13}, {14, 15, 16}, {17, 18, 19} },
       { {21, 22, 23}, {24, 25, 26}, {27, 28, 29} },
       { {31, 32, 33}, {34, 35, 36}, {37, 38, 39} }
    };

    parr = &a1d[0];
    cout << "Our max: " << max_aNd_t(parr, 9) << endl;

    parr = &a2d[0][0];
    cout << "Our max: " << max_aNd_t(parr, (2 * 4)) << endl;

    parr = &a3d[0][0][0];
    cout << "Our max: " << max_aNd_t(parr, (3 * 3 * 3)) << endl;

    return 0;
}

182

(16 відповідей, залишених у Python)

DefineC написав:
Прихований текст

Я не прогер, тому міг погано зрозуміти, що Вам потрібно

Спробував на С++ (в тому ж онлайн-компілері). Результати розходяться (як із першим варінтом python (200 375 425
31875000), так і з другим (ті числа) )
значить проблема або в ітнерпретаторі, або як написали вище у відступах, або десь помилка.

P.S. Ви це мали на увазі? C++

#include <iostream>
using namespace std;
void foo()
{
    int c=0;
    for (int a=1; a<=1001; a++){
        for (int b=a+1; b<=1001; b++)
        {   
            c = 1000 - b - a;
            cout << "c = " << c << ";"<< endl;
            if ((a * a + b * b) == (c * c)){
                cout << "abc: " << a << "; " << b<< "; " << c << ";" << endl;
                cout << "a*b*c = " << (a * b * c) << ";" << endl; 
                return;
            }
        }
    }
    return;
}
main()
{
    foo();
    return 0;
}

range(1, 1001) VS for(int a=1; a<=1001; a++) - Ви проходите більшу кількість ітерацій :)
Звичайно результати будуть відрізнятись. Прочитайте як працює Range у Python

183

(16 відповідей, залишених у Python)

romanyshyn209 написав:
Прихований текст

Додаю рядок таким чином:

def foo():
    for a in range(1, 1001):
        for b in range(a+1, 1001):
            c = 1000 - b - a
            print(c)
            if a * a + b * b == c * c:
                print(a, b, c)
                print(a * b * c)
                return

foo()

Програма виводить на екран багато чисел і я змушений зупиняти її шляхом Ctrl + C.

Скрипт завершить роботу. Для цього йому потрібен час, якого ви йому не даєте. Тут із майже 500 тис. ітерацій циклу програма має виконати, якщо бути точним 179275 ітерацій, (близько 180 тис. ітерацій).

Підсумую, це ніякий не парадокс. А якщо взяти до уваги те, що Python це інтерпретована мова програмування та - те, що йому потрібно вивести на екран повідомлення 180 тис. разів (Хоча для чого Вам ці результати?) це звичайно займе якийсь час. Під час виконання скрипту та виводу в консоль результатів скрипту може здатись ілюзія зациклення.

Спробуйте результат вивести до файлу:

py main.py > out.txt

184

(16 відповідей, залишених у Python)

romanyshyn209 написав:
Прихований текст

Ось такий код у відповідь на завдання

def foo():
    for a in range(1, 1001):
        for b in range(a+1, 1001):
            c = 1000 - b - a
            if a * a + b * b == c * c:
                print(a, b, c)
                print(a * b * c)
                return

foo()

Але після додання рядка друку змінної с всередині другого циклу, програма перестає працювати. З чим це може бути звязано? Якщо не можете пояснити то дайте напрямок

Мені здається ви наплутали щось із відступами. В Python це важливо.
Як саме Ви додаєте рядок? Приклад коду потрібно викладати повністю

185

(14 533 відповідей, залишених у Інше)

Прихований текст
FakiNyan написав:
lucas-kane написав:

Головне не панікувати. Сиди тихо, роби вигляд нема нікого дома, може пронесе...

А шо, бувало, коли вони чули, шо хтось дома є, і намагались силою зайти і поспівать?

:D Не знаю таких випадків. Все можливо.

186

(14 533 відповідей, залишених у Інше)

Головне не панікувати. Сиди тихо, роби вигляд нема нікого дома, може пронесе...

187

(9 відповідей, залишених у C++)

Прихований текст
koala написав:

Тільки зауважу, що оця операція (ділення - множення - віднімання) - це просто знаходження остачі і записується вона %.
На кожному кроці виконуємо
d = n%3; //d заносимо в масив цифр
n /= 3; //а n ділимо націло на 3
Тільки враховуйте, що цифри ви отримуєте у зворотному порядку, від одиниць.

Так згоден. Але це просто алгоритм для розв'язку на аркуші паперу. Хотів чим простіше пояснити, а як пан Mikel45 буде реалізовувати його це вже інше питання. ))) Дякую за зауваження.

188

(9 відповідей, залишених у C++)

Розпочніть краще із вивчення алгоритму перетворення числа із десяткової системи в трійкову, там нічого складного не має. Та на основі цього алгоритму починайте будувати програму. Не спішіть писати це все на комп'ютері. Візьміть листочок  та ручку і переведіть декілька чисел в ручну. Наприклад Ви хочете, ну скажімо число 67 перевести до трійкової системи, тоді потрібно його поділити на 3 на ціло (67  / 3 = 22). Далі цей результат множимо знову на 3 (22 * 3 = 66) та віднімаємо від 67 (67 - 66 = 1) і ми знайшли розряд одиниць, запам'ятовуємо його (заносимо до масиву). Далі ми працюємо вже із числом 22 за вище вказаним алгоритмом ... Виконуємо це ділення доти, доки не буде результат менше 3.

1.) 67 / 3 = 22;
2.) 22 * 3 = 66;
3.) 67 - 66 = 1; -> заносимо у маси в розряд одиниць (у трійковій системі числення).

4.) 22 / 3 = 7;
5.) 7 * 3 = 21;
6.) 22 - 21 = 1; -> заносимо у масив в розряд десятків (у трійковій системі числення).

7.) 7 / 3 = 2;
8.) 2 * 3 = 6;
9.) 7 - 6 = 1; -> заносимо у масив в розряд сотень (у трійковій системі числення).

10.) 2 менше 3, тоді записуємо число у зворотному порядку 2111

Кількість кроків у алгоритмі буде залежати від довжини числа. Отже ми маємо 2111(3) -> 67(10)

https://uk.wikipedia.org/wiki/%D0%A2%D1 … 0%BD%D1%8F

189

(4 відповідей, залишених у C++)

можливо це підійде https://docs.microsoft.com/uk-ua/visual … ll-project

190

(19 відповідей, залишених у C++)

SiriusBlack написав:

Ну мені  виводить тільки трицифрові числа від 144 до 987

Ну що я можу сказати. Прочитай ще раз умову задачі. Зайди на початок теми і прочитай своє перше повідомлення.

191

(19 відповідей, залишених у C++)

Прихований текст
#include <stdio.h>

int main()
{
    int a[5] = {0}; // Масив для зберігання трицифрових чисел послідовності
    int f0, f1, F;

    f0 = 0;
    f1 = 1;

    size_t i, it;
    for (it = 0, i = 0; it < 20; ++it)
    {
        // тут знаходимо послідовність Фібоначчі...
        F = f0 + f1,
        f0 = f1,
        f1 = F;

        // ... та запам'ятовуємо лише числа із 3-ма цифрами...
        if (F >= 100 && F <= 999)
            a[i] = F, i++;
    }

    int x = 233; // Число введене користувачем ...

    for (i = 0; i < 5; ++i)
    {
        printf("a[%d] - %d: ", (i + 1), a[i]); // А тут друкуємо масив...
        if (a[i] == x)                         // ... перевіряємо на збіг...
            printf("Є збіг!");
        printf("\n");
    }

    return 0;
}

Ви не уважно читаєте умову. Масив має містити лише трицифрові числа послідовності... Не всю послідовність. А довжина числа елемента послідовності має бути лише 3 цифри... Їх є всього п'ять елементів https://oeis.org/A000045

192

(19 відповідей, залишених у C++)

Прихований текст
SiriusBlack написав:

Так краще?

#include <stdio.h>
#include <stdlib.h>
#define N 16

int main() {

    int arr[N];

    arr[0] = 1;
    arr[1] = 1;


    for (int i = 2; i < N; i++) {
        arr[i] = arr[i - 1] + arr[i - 2];
    }

    for (int i = 0; i < N; i++) {
        printf("%d\n", arr[i]);
    }
}

Перший пункт виконано. Робіть далі. Тільки в масив Вам потрібно заносити не всю послідовність Фібоначчі а трицифрові числа цієї послідовності.

193

(19 відповідей, залишених у C++)

SiriusBlack написав:

Потрібно створити одновимірний цілочисловий масив, у який занести всі трицифрові числа Фібоначчі.
Надрукувати цей масив і вказати, чи потрапило число, задане користувачем в даний масив.

Прихований текст

Ось пробував зробити код.
Але чомусь не виводить перші два числа(1 1). Як вивести лише трицифрові числа?

#include <stdio.h>
#include <stdlib.h>

#define N 16

int main()
{
    int  i;
    int arr[N];
    arr[0] = arr[1] = 1;
    for (i = 2; i < N; i++) {
     arr[i] = arr[i - 1] + arr[i - 2];
     printf("%d\n", arr[i]);
    }
    return 0;
}

Ви вирішуєте проблему, але не читаєте умови задачі! Дивно.
Для розв'язку перечитайте, ще раз завдання. Незрозуміло! Тоді ще раз читаємо. І так доти поки не дійде )) Напевне.

Отже, щоб вирішити задачу, Вам потрібно розбити її на менші підзадачі:
1. Для початку розібратись, що таке числа Фібоначчі та реалізувати підпрограму, яка буде проходити по цій послідовності;
2. Рухаючись по цій послідовності потрібно вибрати із неї всі трицифрові числа та записати їх в окремий масив;
3. Вивести повідомлення, коли при порівнювані числа користувача із елементами масиву є збіги;
4. Надрукувати цей масив.

P.S. Не потрібно кожного разу коли Вам задають в універів завдання створювати гілку на форумі типу "Розв'яжіть завдання".
Переписуючи Ви ніколи не навчитесь програмувати. Саме це Ви говорили минулого посту: Що ви Аж дуже хочете програмувати.

194

(196 відповідей, залишених у Системне програмування)

Або Ви повинні ініціалізувати в LCD_HandleTypeDef* hlcd показник на I2C_HandleTypeDef* hi2c ще до того, як передасте його аргументом функції lcdI2CInit, тобто I2C_HandleTypeDef* hi2c вже має вказувати на ділянку пам'яті.

195

(196 відповідей, залишених у Системне програмування)

Якщо я правильно зрозумів ви хочете проініціалізувати вказівник на структуру LCD_HandleTypeDef* hlcd, котру ви передаєте першим параметром функції lcdI2CInit, а наступні аргументи цієї функції є саме значеннями котрі повинні заповнити вищезгадану структуру. Оскільки другий аргумент теж вказівник на структуру, то він має вказувати на ділянку пам'яті у стеку, тобто коли компілюється код, під покажчик на цю структуру компілятор резервує для нього пам'ять і він вже має існувати коли передається другим аргументом у функції.

Прихований текст

Приклад коду ...

/* ... */

typedef unsigned char uint8_t;

// Тут, список змінних це абстрактні адреси. Щоб не копіювати лишній код ))
typedef struct {
    uint8_t ada; /* Для прикладу адреса А*/
    uint8_t adb; /* та адреса Б */
} I2C_HandleTypeDef;


/* ... */

typedef struct {
    /* ... */
    I2C_HandleTypeDef* hi2c;
    uint8_t address;
    /* ... */
} LCD_HandleTypeDef;

extern void lcdI2CInit(LCD_HandleTypeDef* hlcd, I2C_HandleTypeDef *hi2c, uint8_t address) {
    hlcd->hi2c = hi2c;     
    hlcd->address = address;
}

int main() {
    /* має існувати ще до того, коли буде передана до функції lcdI2CInit */
    I2C_HandleTypeDef hani2c = { 0x32, 0x33 }, *pi2c = &hani2c;
    LCD_HandleTypeDef hanLCD, *pLCD = &hanLCD;

    lcdI2CInit(pLCD, pi2c, 0x004f);

    return 0;
}

196

(8 відповідей, залишених у C++)

SiriusBlack написав:

Прошу вибачення, що набридаю. Але в мене не виходить:

Прихований текст
#include <stdlib.h>
#include <stdio.h>
#define MAX 25

int main()
{
    system("chcp 1251");
   double x, i = 1, res = 0;
    printf("Введіть значення x:");
    scanf_s("%f", &x);
    while (i < MAX) {
        res = x;
        res = res * (x - i / x);
        i++;
    }
    printf("Результат добутку x*(x-1/x)*(x-2/x)*...*(x-25/x)= %0.5f", res);
    return 0;
}

Виходить щось ось таке:

Введіть значення x:11

Результат добутку x*(x-1/x)*(x-2/x)*...*(x-25/x)= 8567280404611006264688284146259184102164488405110255869302943159450107127459734303857158746440272983053373599573553165893632.00000

#include <stdlib.h>
#include <stdio.h>
#define MAX 25

int main()
{
    long double x, i = 1;

    printf("Введіть значення x:");
    scanf_s("%lf", &x);

    long double res = x;
    while (i <= MAX) {
        res = res * (x - i / x);
        i++;
    }
    printf("Результат добутку x*(x-1/x)*(x-2/x)*...*(x-25/x)= %Le", res);
    return 0;
}
Прихований текст

https://www.google.com/search?rlz=1C1CH … 9wQ4dUDCA0
Знайдіть x = 11 і подивіться який там степінь на десяткою.

197

(8 відповідей, залишених у C++)

SiriusBlack написав:

Якщо чесно, то не до кінця все це розумію(((

Що ж тут не зрозуміло. Для того щоб обчислювати наступний крок функції, потрібно знати попередній.

#include <stddef.h>

int main()
{
    long double x = (-4.14L), // Ініціалізуємо змінну x вручну
        p = x;

    size_t n = 1;
    while (n <= 25)
        p = p * (x - n / x), n++;

    return 0;
}

І до чого ви у темі вказали цикли в Сі? Модераторам потрібно створити гілку на форумі "Допоможіть розв'язати домашку".

198

(3 відповідей, залишених у C++)

При наслідуванні класу t передавайте конструктору типи котрі оголошені у шаблоні.

template <typename T2, typename T3>
class ts : public t<T2, T3> {
public:
    ts(T2 vl, T3 vll) : t<T2, T3>(vl, vll) { /* ... */ }
};

тоді у main функції буде

int main()
{
    g G(5), F(7);

    t<g, g> ob1(G, F);
    ts<g, g> ob2(G, F);

    obj1.sti();
    obj2.sti();
}

199

(15 відповідей, залишених у Python)

burdanazar86 написав:

проблема в "#тут"

Щоб Вам допомогли, тоді потрібно хоч трохи розписати проблему, розказати про роботу коду на словах, що є на вході, що ви хочете отримати на виході.
Дивно. Змахує на те що Ви просто стягнули скрипт із мережі вставили сюди. Для чого?

200

(4 відповідей, залишених у C++)

Пані Lena_17 Ваша програма працює погано через те що банально виходить за межі масиву sent. Я так розумію у вас є масив words, на котрого ви спираєтесь і точкою відліку циклу є цей масив. Давши на вході речення зі словами, кількість слів у цьому реченні не завжди буде рівне 50. І у Ваших прикладах їх кількість менше за 50, а цикл ви чомусь проходите відносно масиву words, не масиву sent, тобто дочекавшись його останнього нульового символу.

А на рахунок змінної вказівника p, я думаю це і справді зайве. Ті дії котрі Ви з ним проводите можна проводити і з ім’ям масиву. Його доцільно використовувати тільки у тому випадку коли Ви не хочете створювати ітераційну змінну i для циклу. Тобто

У Вас є масив і Ви хочете дізнатись його довжину, тоді код із додатковою змінною буде:

Прихований текст
int main()
{
    char str[] = "Hello World!";

    size_t i = 0;
    for (; str[i] != '\0';)
        i++;

    size_t len;

    len = str[i] - str[0] + 1;
    // len = i + 1;

    return 0;
}

а із вказівником:

Прихований текст
int main()
{
    char str[] = "Hello World!", *p;

    p = str;
    for (; *p != '\0';)
        p++;

    size_t len = p - str + 1;

    return 0;
}

Про це раджу прочитати книгу Денніса Рітчі та Браяна Кернігана, Мова програмування Сі.

Взагалі Ваше завдання це пошук підрядка (префікса чи суфікса) у рядку. На цю тему є вже готові алгоритми (Z-функіця, Алгоритм Кнута — Морріса — Пратта та багато інших подібних алгоритмів) Скоріше за все Відповідь на Ваше питання Ви знайдете саме в них.