Форум программистов, компьютерный форум, киберфорум
Обо всем!
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
1

Нелогичные принципы программирования

20.09.2018, 21:01. Показов 2124. Ответов 67
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я вспомнил программу, по которой как то начинал изучать программирование на языке С++, код приложу к теме. Программа определяет количество нечётных чисел в диапазоне введённом пользователем. Понятно как работает это в программировании, но в реальности это полная чушь, как может быть количество нечётных чисел в диапазоне от 5 до 10 - 21?! Это невозможно. В диапазоне от 5 до 10 нечётных чисел - 3 (5, 7, 9 - нечётные числа) это результат логики человека, а результат логики компьютера - 21. Бредовое значение, так же как и деление по модулю. 5 разделить на 2 будет один, что за ахинея? Методом логики человека выражение 5 яблок разделить на 2 будет иметь результат = 2.5 яблока, разве нет? Как работает понятно, непонятно почему языки программирования создали такими нелогичными. Язык питон имеет интуитивно понятный синтаксис. Под этим аспектом языка python подразумеваются команды и инструкции в виде английских слов, соответственно понятнее что выполняется в коде языка, print - печать (в пер. на русский), int/integer - целый (в пер. на русский), так же и другие многие термины языка. Но это касается синтаксиса языка, а что касается принципа работы языков программирования? Ведь то же деление по модулю это же ужас, как такое можно придумать было? Если бы компьютер был создан по логике человека, программировать было бы намного проще. Это касается и математики. Строго не судите, я могу быть во всём прав а могу быть не прав ни в чём, просто спрашиваю, кто что думает по этому поводу?
Кликните здесь для просмотра всего текста
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
#include<iostream>
#include<cstdlib>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    int sum = 0;
    int rangeBegin, rangeEnd;
 
    cout << "Введите начало диапазона: " << endl;
        cin >> rangeBegin;
    cout << "Введите конец диапазона: " << endl;
        cin >> rangeEnd;
 
    do
    {
        if(rangeBegin % 2 != 0)
            {
                sum += rangeBegin;
            }
 
            rangeBegin++;
    } while (rangeBegin<rangeEnd);
 
        cout << "Сумма указанных чисел в диапазоне: " << sum << endl;
 
    system("pause>nul");
    return 0;
 
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2018, 21:01
Ответы с готовыми решениями:

Принципы структурного программирования.
Дайте пожал-ста полное изложение принципов структурного программирования

Общие принципы программирования
Доброго времени суток, уважаемые форумчане, подскажите, пожалуйста, литературу\видео уроки по общим...

Общие принципы программирования графики
Привет. Уже почти 2 месяца осваиваю программирование графики с использованием DirectX (планирую...

Фундаментальные принципы объектно ориентированного программирования
Я вот пытаюсь изучать ООП на с++ и столкнулся с тем что все кто пытается объяснить что это такое...

67
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.09.2018, 21:53 2
Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
Ведь то же деление по модулю это же ужас, как такое можно придумать было?
Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
деление по модулю. 5 разделить на 2 будет один, что за ахинея?
Подразумевается остаток от деления. Просто запомнить один раз и всё.

Добавлено через 2 минуты
Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
if(rangeBegin % 2 != 0)
Читаем - если остаток от деления rangeBegin на 2 не равен 0 (то есть число нечетное)

Добавлено через 2 минуты
Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
В диапазоне от 5 до 10 нечётных чисел - 3 (5, 7, 9 - нечётные числа)
Да, и в программе считается сумма нечётных чисел, а не их количество.
0
Эксперт .NET
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
21.09.2018, 10:06 3
Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
просто спрашиваю, кто что думает по этому поводу?
Я думаю, что у вас "бурление" началось без попытки вдуматься и разобраться в происходящем.
0
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
21.09.2018, 18:02  [ТС] 4
Usaga, бурление . Ну почему же, в тех. моментах программы о которых я написал я разобрался. Я говорю же что как это работает понятно, не понятно почему это так работает) Почему не сделать проще? Как написал товарищ SoftIce, в программе считается сумма нечётных чисел а не их количество, но в условии к программе сказано указать кол-во чисел а не их сумму.
0
Эксперт .NET
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
21.09.2018, 18:04 5
Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
Почему не сделать проще?
И так уже просто, дальше некуда.

Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
но в условии к программе сказано
Без разницы, что в условии. Тут сам код обсуждался.
0
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
21.09.2018, 18:22  [ТС] 6
Usaga, в этой ситуации может быть и просто, но я говорю про несовпадение логики человека с логикой компьютера, когда индексация элементов массива начинается с нуля это логично? Это не логично. Ноль это ничего, пустота, как можно значение инициализировать пустотой? Пустота это ничто, это вакуум. Люди придумали термин ноль в математических вычислениях чтобы как то обозначить эту пустоту. Люди же не будут говорить "Я имею ввиду ну это, то что не цифра, не буква и не число, ну ты понял что это", чтобы так не говорить они говорят "Я имею ввиду ноль". Я могу понять инициализацию переменной значением ноль, это значит зарезервировать область памяти но не заполнять её, переменная а = 0, переменная пустая. Она может в дальнейшем использоваться может и нет но она зарезервирована, хотелось бы понять и про индексацию массивов, почему она начинается с нуля? Массив это своеобразный комплект переменных, массив NUMB состоит из четырёх значений, их индексы: N = 0, U = 1, M = 2, B = 3. Т.е. переменная N пустая, U равна единице и т.д... Или они все пустые просто индекс это адрес по которому можно обратиться к этим переменным в массиве? Если я в чём то не прав направьте в нужное русло, это просто рассуждения в слух. В слух это важно, рассуждая про себя я не узнаю правду) А так вы расскажете где я не прав.
0
Эксперт .NET
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
21.09.2018, 19:18 7
Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
в этой ситуации может быть и просто
Только эта ситуация тут и обсуждалась.

Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
но я говорю про несовпадение логики человека с логикой компьютера, когда индексация элементов массива начинается с нуля это логично?
Абсолютно логично. Стоит только узнать как формируется адрес элемента в массиве и всё сразу встанет на свои места.

Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
Ноль это ничего, пустота, как можно значение инициализировать пустотой?
Ничто - мнение сформированное на эмоциях, а не на понимании ситуации.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
21.09.2018, 19:18 8
Цитата Сообщение от 3eJIeHbIu Посмотреть сообщение
хотелось бы понять и про индексацию массивов, почему она начинается с нуля?
Смещение элемента от начала области памяти, где лежит куча таких элементов, образующих массив.
Начальный элемент находится по смещению ноль.
0
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
21.09.2018, 19:23  [ТС] 9
Usaga, так объясните как правильно понимать. Как формируется адрес элемента в массиве)?
0
Эксперт .NET
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
21.09.2018, 19:25 10
3eJIeHbIu, адрес первого элемента + (размер элемента * индекс элемента)
0
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
21.09.2018, 19:27  [ТС] 11
Rius, была такая мысль, про смещение. Это что то вроде по типу часов? Первый час начинается с 00:00 по 01:00, нельзя сказать что первый час это метка 00:00 и всё, просто начальная метка этого часа находится по смещению ноль. Так и область памяти это не абстрактная метка ноль а с нуля до единицы, верно?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
21.09.2018, 19:31 12
3eJIeHbIu, нет, это типа начальным элементом массива является элемент, лежащий в начале области памяти, выделенной под массив.
0
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
21.09.2018, 19:33  [ТС] 13
Rius, я это и имел ввиду.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
21.09.2018, 19:45 14
3eJIeHbIu,
Вот массив, расположенный по адресу 0x2002ffdc;
Индекс начального элемента 0;
По формуле выше получается, что начальный элемент по адресу 0x2002ffdc, что и показывает отладчик.
Миниатюры
Нелогичные принципы программирования  
0
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
21.09.2018, 19:51  [ТС] 15
Rius, хорошо, индексом начального элемента является 0, а значение этого элемента? Индекс это номер а значение у элемента есть?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
21.09.2018, 19:52 16
А вы выше не видите его?
0
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
21.09.2018, 19:58  [ТС] 17
Rius, нет, ткните носом пожалуйста) У меня такой принцип обучения, мне легче увидеть, понять и запомнить, память хорошая, нежели самому додумывать, искать)
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
21.09.2018, 19:59 18
Это не принцип обучения, а лень.
Смотрите на скриншот и постигайте.
1
0 / 3 / 0
Регистрация: 14.11.2015
Сообщений: 258
21.09.2018, 20:12  [ТС] 19
Rius, так знакомый учился в мгу, программист, разработчик ПО. Читали лекцию и давали литературу, но ничего не объясняли, на вопросы не отвечали. Короче сам выучился по туториалам и книгам, хотя преподаватели кандидаты и доктора прикладных наук. Это не лень а правильное восприятие информации. Для того чтобы человек что то изучил ему нужно показать и объяснить, можно конечно и как вы предлагаете, смотреть на скриншот и постигать, но это дорога посложнее. Это та ситуация когда можно идти по дороге короче и результат будет такой же. Если не сложно объясните, в противном случае ну что ж, попробую разобраться.

Добавлено через 7 минут
Rius, 0x1110(Hex) это значение?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,659
Записей в блоге: 14
21.09.2018, 20:32 20
Да.
0
21.09.2018, 20:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2018, 20:32
Помогаю со студенческими работами здесь

Страуструп - принципы и практика программирования. Ошибки компиляции
При компиляции примеров из книги, 12 главы (графика), получаю ошибки: Ошибка 1 error LNK2019:...

Нелогичные ошибки
Не буду тянуть кота за хвост - есть 2 маленькие программы, которые на вид не имеют ошибок, а по...

Нелогичные исключения
Здравствуйте, помогите пожалуйста решить следующий вопрос. Я создал три класса собственных...

Нелогичные выводы из текстов песен
Суть такова: 1. Находим песню 2. Находим её текст 3. Находим логические нестыковки в песне. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru