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

Не могу отловить крайние случаи - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создание тестовой оболочки http://www.cyberforum.ru/cpp-beginners/thread1541647.html
Доброго времени суток. Хочу создать тестовую оболочку. Подскажите с чего начать. P.S: Без троллинга, помогите добрые люди
C++ Вычисление функции разложением в ряд Тейлора Дано вещественное число X и целое число N (> 0). Найти значение выражения X − X3/(3!) + X5/(5!) − … + (−1)N·X2·N+1/((2·N+1)!) x-\frac{{x}^{3}}{3!}+\frac{{x}^{5}}{5!}+...+\frac{{-1}^{N}{x}^{2N+1}}{(2N+1)!} (N! = 1·2·…·N). Полученное число является приближенным значением функции sin в точке X. через FOR помогите очень нужно буду благодарен http://www.cyberforum.ru/cpp-beginners/thread1541644.html
Ввести число и номер месяца. Напечатать дату прописью C++
Ввести число и номер месяца. Напечатать дату прописью. Как можно это реализовать?
C++ Что такое "эхо печать"? И как через такую печать сделать калькулятор?
Само задание такое: Создать программу-калькулятор, обеспечивающую ввод с клавиатуры в режиме эхо-печати только цифр, а также обработку нажатия клавиш +, -, *,/ с помощью акселераторов. Я не пойму фразу "ввод с клавиатуры в режиме эхо-печати". Что она означает? Гугл упорно суёт мне PHP. Но мне надо сделать на C++ (Win API). Что такое эхо-печать?
C++ Aapt.exe could not be found http://www.cyberforum.ru/cpp-beginners/thread1541611.html
Установил vs 14, доустановил ndk в нем же, создаю стандартный проект "Hello world", собираю, при попытке запустить появилась ошибка aapt.exe could not be found at ' ', потом постоянно при настройке проекта она постоянно вылетала. Может кто сталкивался с таким? Помогите если справились
C++ Переставить цифры местами так, чтобы получилось большее число Дано число. Если можно переставить его цифры так, чтобы получилось большее число, выведите YES, в противном случае выведите NO. Например, в числе 3112 можно переставить цифры и получить 3211, подробнее

Показать сообщение отдельно
UltraPenguin
227 / 93 / 22
Регистрация: 20.03.2014
Сообщений: 301
Завершенные тесты: 1
30.09.2015, 21:04     Не могу отловить крайние случаи
Цитата Сообщение от oPean Посмотреть сообщение
Оно должно происходить в той же функции, что и выделят?
Только если вам не нужно возвращать указатель на выделенную память. В вашем случае удалять нужно в main перед return 0.

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
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int ** create_array2d(const int& rows, const int& cols) 
{
   int **m = new int*[rows];
   for(int i = 0; i < rows; ++i)
      m[i] = new int [cols];
   return m;
}
 
int ** transpose(const int * const * m_, const int& rows, const int& cols)
{
    int **mt_ = create_array2d(cols, rows);
 
    for (int i = 0; i < cols; ++i) {
        for (int j = 0; j < rows; ++j)
            mt_[i][j] = m_[j][i];
    }
    
    return mt_;
}
 
/*Дублирующийся код выделяем в отдельные функции/процедуры*/
void show(const int * const * m_, const int& rows, const int& cols)
{
   for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j)
            cout << m_[i][j] << " ";
        cout << endl;
    }
}
 
void destroy(int** m_, const int& rows)
{
   for (int i = 0; i < rows; ++i)
        delete[] m_[i];
   delete[] m_;
}
 
int main() 
{
    int rows =3, cols = 5;
    int **m = create_array2d(rows, cols);
    
    int count = 0;
    for (int i = 0; i < rows; ++i) // безопаснее использовать неравенства вместо != или ==
    {
         for (int j = 0; j < cols; ++j)
         {
              m[i][j] = count;
              count++;
         }
    }
    show(m, rows, cols);
 
    int **mt = transpose(m, rows, cols);
    show(mt, cols, rows);
    
    /*Обязательно чистим за собой!*/
    destroy(m, rows);
    destroy(mt, cols);
    return 0;
}
Оно преподносится в курсах как более эффективное
Может быть, просто я такого выделения пока не встречал

Добавлено через 6 минут
Цитата Сообщение от oPean Посмотреть сообщение
Обратите внимание, что вам неизвестно, каким именно способом выделялась память для массива M
Соответственно память должна быть выделена до transpose (что логично), т.е. в main.

Добавлено через 2 минуты
На будущее старайтесь не использовать глобальные переменные.

Добавлено через 20 минут
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
/*Если используете unsigned, то используйте его везде*/
unsigned Strlen(const char *str)
{
    unsigned count = 0;
    while (*str != 0) {
        ++str; // ++str быстрее str++
        ++count;
    }
    return count;
}
 
int Strstr(const char *text, const char *pattern)
{
    unsigned len_text = Strlen(text);
    unsigned len_pattern = Strlen(pattern);
    
    /*Ваши условия можно сократить до этих двух строк*/
    if (len_text < len_pattern) return -1;
    if (len_pattern == 0) return 0;
 
    unsigned textPos = 0;
    unsigned pattPos = 0;
    unsigned textPosOld;
    while (textPos < len_text)
    {
        textPosOld = textPos;
        while (text[textPos] == pattern[pattPos] && pattPos < len_pattern)
        {
            ++pattPos;
            ++textPos;
        }
        if (pattPos >= len_pattern)
            return textPosOld;
        else
        {
            pattPos = 0;
            textPos = textPosOld + 1;
        }
    }
    return -1;
}
 
int main()
{
    const char text[] = "abcdefghijk";
    const char pattern[] = "cde";
    cout << Strstr(text, pattern);
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru