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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
servus_mori
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 52
#1

C++ первые шаги (абсолютно первые) - C++

15.04.2013, 10:11. Просмотров 3094. Ответов 17
Метки нет (Все метки)

Привет, пользователи CyberForum. Я относительно давний юзер этого форума, и вот, наконец-то решил воплощать мечту в реальность, а именно стать хорошим программистом (но не быдло-кодером). Знания ПК и вообще программирования у меня на нуле (ну я, скажем, опытный пользователь виндоус, с двумя близкими друзьями ИТшниками сертифицированными, то есть рос в этой среде), но есть неплохие базовые знания математики, со школьного курса и диплом музыканта, говорящий об относительном развитии творческого мышления. И так, от слов к делу.

Тема "Литература С++" натолкнула меня на книгу ""Programming: Principles and Practice Using C++"".
Книга, кстати, хороша, советую всем начинающим, потому, что понимаю все что там написано (Правда немного еще прочел). Тему эту создал, потому как нуждаюсь в, своего рода, наставниках, к кому могу обращаться с вопросами. Буду постить тут задачи и их решения, а также рассчитываю на помощь, которая может мне периодами быть необходима. В идеале, надеюсь, что кто-нибудь согласится помогать мне в скайпе.


Итак задача:
Написать программу, предлагающую пользователю ввести 3 целых числа, а затем вывести их в порядке возрастания, разделяя запятыми.

Решение:
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
#include "std_lib_facilities.h"
int main()
{
    setlocale( LC_ALL,"Russian" );
    cout << "Пожулайста, введите 3 числа (Затем нажмите ENTER)\n";
    int number_one; // выделяем раздел для первого введенного числа
    int number_two; // второго
    int number_three; // третьего
    while (cin>>number_one>>number_two>>number_three) {  
 
        if (number_one < number_two < number_three)
            cout << number_one << ', ' << number_two << ', ' << number_three << "\n";
        if (number_one > number_two > number_three)
            cout << number_three << ', ' << number_two << ', ' << number_one << "\n";
        if (number_two < number_one < number_three)
            cout << number_two << ', ' << number_one << ', ' << number_three << "\n";
        if (number_one < number_three < number_two)
            cout << number_one << ', ' << number_three << ', ' << number_two << "\n";
        if (number_three < number_one < number_two)
            cout << number_three << ', ' << number_one << ', ' << number_two << "\n";
        if (number_two < number_three < number_one)
            cout << number_two << ', ' << number_three << ', ' << number_one << "\n";           
    }
    keep_window_open();
    return 0;
}
Компилятор: "warning C4804: <: небезопасное использование типа "bool" в операции"

пропускаем

В итоге получаем следующее:
Миниатюры
C++ первые шаги (абсолютно первые)  
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.04.2013, 10:29     C++ первые шаги (абсолютно первые) #2
Цитата Сообщение от servus_mori Посмотреть сообщение
но есть неплохие базовые знания математики
помогут.
Цитата Сообщение от servus_mori Посмотреть сообщение
диплом музыканта, говорящий об относительном развитии творческого мышления.
Каким образом?
chizz
979 / 493 / 54
Регистрация: 19.03.2013
Сообщений: 3,073
Записей в блоге: 18
Завершенные тесты: 1
15.04.2013, 10:29     C++ первые шаги (абсолютно первые) #3
Лучше запиши числа в массив, отсортируй его по возрастанию и выведи.

ЗЫ. Потому что если будет например 4 числа, то придется переделывать весь код, а это плохо.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.04.2013, 10:33     C++ первые шаги (абсолютно первые) #4
Цитата Сообщение от servus_mori Посмотреть сообщение
if (number_one < number_two < number_three)
Такая форма допустима в математике, но не в программировании, машина не человек и не способна сравнивать сразу три числа.
C++
1
if ((number_one < number_two)&&(number_two< number_three))
.
servus_mori
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 52
15.04.2013, 11:03  [ТС]     C++ первые шаги (абсолютно первые) #5
Цитата Сообщение от taras atavin Посмотреть сообщение
Каким образом?
Нуу, просмотрел несколько книг, и в каждой указано, что программирование не сводится, исключительно, к выучиванию "формул", нужен своего рода творческий подход и воображение. По специальности я музыкант (то биш творческий подход - моя стезя), но забросил это дело, ибо с детства ощущаю в себе страсть к цифрам (ну тупанул разок и поступил не туда).


Цитата Сообщение от chizz Посмотреть сообщение
Лучше запиши числа в МАССИВ, отсортируй его по возрастанию и выведи.
Массив...

Цитата Сообщение от taras atavin Посмотреть сообщение
1
if ((number_one < number_two)&&(number_two< number_three))
Это попонятнее, но основная моя цель - понимать то, что делаю. "&&" - насколько я знаю(точнее знает гугл, а я так, цитирую), это оператор для сравнивания "bool" в языке СиШарп(С#) (пытался както начать изучение с этого языка, но не подобрал подходящей литературы, да и ++ заинтересовал больше). Просветите, если путаю, и объясните подробнее, что именно выполняет этот оператор с этими переменными.

*Да и еще, откуда мой компилятор, взял "небезопасное использование типа "bool" в операции"? Я не говорил ему ни о каких "Правда или Желание".
Jupiter
15.04.2013, 11:19
  #6

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
Такая форма допустима в математике, но не в программировании

Python
1
2 < 5 < 7
http://*******/JSOSS

chizz
979 / 493 / 54
Регистрация: 19.03.2013
Сообщений: 3,073
Записей в блоге: 18
Завершенные тесты: 1
15.04.2013, 11:25     C++ первые шаги (абсолютно первые) #7
if (number_one < number_two < number_three)

Оператор < возвращает значение типа bool, которое ты потом сравниваешь с переменной типа int.

То бишь number_one < number_two вернет true (1) или false (0), которое ты затем сравниваешь с number_three.


Цитата Сообщение от servus_mori Посмотреть сообщение
Массив...
Да, массив. Код, который ты привел - даже быдло кодом назвать можно с натяжкой.

Добавлено через 4 минуты
Цитата Сообщение от Jupiter Посмотреть сообщение
2 < 5 < 7
Конечно true

Jupiter, в питоне это работает, в C++ нет.

8 < 5 < 7 возвращает true например.
Jupiter
15.04.2013, 11:29
  #8

Не по теме:

Цитата Сообщение от chizz Посмотреть сообщение
в питоне это работает, в C++ нет.
да вы что, а я и не знал, а вы не заметили теги оффтопа и цитату в моем сообщении?

chizz
15.04.2013, 11:39
  #9

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
да вы что, а я и не знал,
Вы то знаете. Другие нет.

PS. За ссылку спасибо.

servus_mori
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 52
15.04.2013, 11:43  [ТС]     C++ первые шаги (абсолютно первые) #10
Цитата Сообщение от chizz Посмотреть сообщение
Да, массив. Код, который ты привел - даже быдло кодом назвать можно с натяжкой.
все со временем. Сначала ты чайник, потом быдло-кодер, а далее, либо норм программист, либо быдло-кодер. Я прочел то, всего ничего, и составил код из того, что имею (не практикую прыгать вперед в освоении какой либо книги). С выражением "Массив" я пока не встречался, был бы благодарен если б пояснил.

*Да и не забрасывайте меня помидорами. Возможно, вы все когда-то начинали освоение программирования уже будучи генетически к этому предрасположенными, и ни к кому за помощью не обращались, но видимо, для того вы и созданы гениями, чтобы могли обратиться к вам. (Предупреждение: в сообщение присутствует некоторая доля иронии. Все персонажи выдуманы или не выдуманы)
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.04.2013, 11:48     C++ первые шаги (абсолютно первые) #11
Цитата Сообщение от servus_mori Посмотреть сообщение
Нуу, просмотрел несколько книг, и в каждой указано, что программирование не сводится, исключительно, к выучиванию "формул", нужен своего рода творческий подход и воображение.
Да. Но при чём здесь профессия музыканта? Ему сочинять не надо.

Добавлено через 1 минуту
Цитата Сообщение от servus_mori Посмотреть сообщение
. "&&" - насколько я знаю(точнее знает гугл, а я так, цитирую), это оператор для сравнивания "bool" в языке СиШарп(С#)
Нет. "&&" значит "и".

Добавлено через 1 минуту
Цитата Сообщение от servus_mori Посмотреть сообщение
что именно выполняет этот оператор с этими переменными.
Это не переменные, а выражения, переменные в данном случае - части выражений.

Добавлено через 1 минуту
Цитата Сообщение от servus_mori Посмотреть сообщение
*Да и еще, откуда мой компилятор, взял "небезопасное использование типа "bool" в операции"? Я не говорил ему ни о каких "Правда или Желание".
while принимает только bool.
chizz
979 / 493 / 54
Регистрация: 19.03.2013
Сообщений: 3,073
Записей в блоге: 18
Завершенные тесты: 1
15.04.2013, 11:54     C++ первые шаги (абсолютно первые) #12
Цитата Сообщение от servus_mori Посмотреть сообщение
С выражением "Массив" я пока не встречался
А, ну тогда ладно, беру свои слова назад.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.04.2013, 12:00     C++ первые шаги (абсолютно первые) #13
Ну аспектно-функционально-ориентированный транслятор, видимо, переводит, а плюсы не занимаются анализом логики.

Добавлено через 4 минуты
Цитата Сообщение от servus_mori Посмотреть сообщение
С выражением "Массив" я пока не встречался, был бы благодарен если б пояснил.
Тогда тебе тем более рано браться за ввод двух и более семантически не различающихся чисел подряд. Сначала изучи массивы, потом переходи к задачам, в которых бывает несколько величин с общей семантикой.
servus_mori
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 52
15.04.2013, 12:22  [ТС]     C++ первые шаги (абсолютно первые) #14
taras atavin, кстати, решение
C++
1
if ((number_one < number_two)&&(number_two < number_three))
заработало. Спасибо
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.04.2013, 12:38     C++ первые шаги (абсолютно первые) #15
По мере роста количества элементов объём текста для ввода будет расти линейно, а количество вариантов не линейно, усложняя программу, а переменность количества элементов ставит под угрозу саму реализуемость. Но все проблемы решаются сами, если использовать массив, так как там можно за 1 раз сравнивать ровно 2 элемента при сортировке, или поиске экстремума, при поиске локального максимума 3 и при поиске перегиба 5 и вообще не менять порядок сравнения, что возвращает к линейной сложности для фиксированных размеров 2, 3 и 5, а количество элементов отлично будет регулироваться циклом. Другое дело, если надо сравнить 3 величины, различающиеся по смыслу задачи. Не number_one, number_two и number_three, а хотя бы, например, координаты по осям x, y и z, чьё сравнение даст оптимальный вид дроби и обратной функции для нахождения углов.
servus_mori
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 52
15.04.2013, 13:08  [ТС]     C++ первые шаги (абсолютно первые) #16
Перечитаю, как-нибудь, 4ерез недельку)
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.04.2013, 05:20     C++ первые шаги (абсолютно первые) #17
Книга не даёт уровня, подход не верен. Книга только помогает, а учить язык надо на своих прогах. Прочитал, попробовал, потом придумал что то своё, тоже попробовал, пару раз ошибся, прочитал следующий кусок...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 18:05     C++ первые шаги (абсолютно первые)
Еще ссылки по теме:

Вызов точки останова во время выхода (первые шаги в классах C++) C++
C++ Первые шаги: ничего не получается
Первые шаги по базовому курсу Шилдта - ошибка синтаксиса приведенного кода C++
C++ Поделитесь опытом. С чего вы начинаете новый проект? Первые шаги?
C++ Первые шаги в освоении С++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6366 / 3013 / 297
Регистрация: 04.12.2011
Сообщений: 8,112
Записей в блоге: 3
23.04.2013, 18:05     C++ первые шаги (абсолютно первые) #18
servus_mori, я тоже в С++ недавно. Хорошая школа и цельное программистское образование это прекрасно. Желаю Вам найти приличного наставника и много терпения.
Вообще сравнение 3-х чисел, - хорошая тема для размышлений и я решил показать пару примеров. Мне они кажутся забавными, хотя на вкус и цвет...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//эта программа работает напрямую с переменными используя каждый раз их значения и не позволяет
//от этого абстрагироваться ни на одном шаге, перейдя от "этот" к "тот из всех который" или "тот из оставшихся который"
//или "тот, что остался". Имена переменных внутри програмы неразличимы. Правильность работы обеспечивается
//правильной последовательностью действий, но ценность программы продемонстрировать её низкий уровень абстракции
//в соседстве с некоторой избыточной техникой применения 3-нарного оператора (он сам по себе - вещь незаменимая и не виноват))
#include <iostream>
using namespace std;
int main(int argc, char* argv[]){
setlocale(0,"rus");
int one=1,two=2, three=3;
int minim=0;
minim=((((one<two)?one:two)<three)?((one<two)?one:two):three);//мин из 3-x
cout<<minim<<" ";
minim=(minim==one)?((two<three)?two:three):((one<three)?one:three);//мин из 2-x отавшихся
cout<<minim<<" ";
cout<<((((one>two)?one:two)>three)?((one>two)?one:two):three);//печатем максимум
cout<<endl;
system("pause");
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
//Тут всё иначе, потому что данные доступны косвенно, то есть по индексам массива и это позволяет оперировать с ними,
//например сравнивать и переставлять не зная имён но формируя шаги к которым возвращаться уже не нужно. 
//это простенькая программка, но она неизмеримо лучше предшественницы
#include <iostream>
using namespace std;
//два глобальных объявления - целое и функция вызываемая из main
const int arrSz=3;
void fooChageIfFindAbnormalByGrow(int (&arr)[arrSz]){//функция найдя убывающий порядок у 2-x соседей меняет их местами. Одна перестановка за вызов
int chengerBox=0;
for(int i=1; i<arrSz; ++i)//тут один простой цикл все же необходим
if(arr[i-1]>arr[i]){
chengerBox=arr[i-1];
arr[i-1]=arr[i];
arr[i]=chengerBox;
}
}
int main(int argc, char* argv[]){
setlocale(0,"rus");
int someOnes[]={5,2,3};
while(true){//этот цикл - трясем пока не вытрясем
fooChageIfFindAbnormalByGrow(someOnes);//будем трясти пока не станут по местам все
if((someOnes[0]<=someOnes[1])&&(someOnes[0]<=someOnes[1]))break;//если вытрясли - выходим
}
cout<<someOnes[0]<<" "<<someOnes[1]<<" "<<someOnes[2]<<endl;
system("pause");
return 0;
}


Добавлено через 1 час 29 минут
Извините, хоть оно и так работает, но для порядку (если увеличить количество элементов в массиве, а это легко, то не заработает)) :
Цитата Сообщение от IGPIGP Посмотреть сообщение
if((someOnes[0]<=someOnes[1])&&(someOnes[0]<=someOnes[1]))break;//если вытрясли - выходим
нужно бы:
C++
1
if((someOnes[0]<=someOnes[1])&&(someOnes[1]<=someOnes[2]))break;//0<1<2
Yandex
Объявления
23.04.2013, 18:05     C++ первые шаги (абсолютно первые)
Ответ Создать тему
Опции темы

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