Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/54: Рейтинг темы: голосов - 54, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 53
1

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

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

Author24 — интернет-сервис помощи студентам
Привет, пользователи 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++ первые шаги (абсолютно первые)  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2013, 10:11
Ответы с готовыми решениями:

Первые шаги.
Здравствуйте. Извините, может, за тупые вопросы. Но с языком С впервые сталкиваюсь. Использую...

Первые шаги в освоении С++
Добрый день! Решил начать изучение С++. Для этого, как полагается, скачал соответствующую...

Первые шаги в программированнии!
Добрые товарищи помогите чайнику в программировании с одной проблемой. Я решил изучить язык...

ООП, первые шаги
Доброго времени суток! Собственно, начал изучать С++. Решил наваять небольшую програмку, которая...

17
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.04.2013, 10:29 2
Цитата Сообщение от servus_mori Посмотреть сообщение
но есть неплохие базовые знания математики
помогут.
Цитата Сообщение от servus_mori Посмотреть сообщение
диплом музыканта, говорящий об относительном развитии творческого мышления.
Каким образом?
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
15.04.2013, 10:29 3
Лучше запиши числа в массив, отсортируй его по возрастанию и выведи.

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


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

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

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

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
Такая форма допустима в математике, но не в программировании
:facepalm:
Python
1
2 < 5 < 7

3
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
15.04.2013, 11:25 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 например.
0
Jupiter
15.04.2013, 11:29
  #8

Не по теме:

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

0
chizz
15.04.2013, 11:39
  #9

Не по теме:

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

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

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

*Да и не забрасывайте меня помидорами. Возможно, вы все когда-то начинали освоение программирования уже будучи генетически к этому предрасположенными, и ни к кому за помощью не обращались, но видимо, для того вы и созданы гениями, чтобы могли обратиться к вам. (Предупреждение: в сообщение присутствует некоторая доля иронии. Все персонажи выдуманы или не выдуманы)
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.04.2013, 11:48 11
Цитата Сообщение от servus_mori Посмотреть сообщение
Нуу, просмотрел несколько книг, и в каждой указано, что программирование не сводится, исключительно, к выучиванию "формул", нужен своего рода творческий подход и воображение.
Да. Но при чём здесь профессия музыканта? Ему сочинять не надо.

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

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

Добавлено через 1 минуту
Цитата Сообщение от servus_mori Посмотреть сообщение
*Да и еще, откуда мой компилятор, взял "небезопасное использование типа "bool" в операции"? Я не говорил ему ни о каких "Правда или Желание".
while принимает только bool.
0
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
15.04.2013, 11:54 12
Цитата Сообщение от servus_mori Посмотреть сообщение
С выражением "Массив" я пока не встречался
А, ну тогда ладно, беру свои слова назад.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.04.2013, 12:00 13
Ну аспектно-функционально-ориентированный транслятор, видимо, переводит, а плюсы не занимаются анализом логики.

Добавлено через 4 минуты
Цитата Сообщение от servus_mori Посмотреть сообщение
С выражением "Массив" я пока не встречался, был бы благодарен если б пояснил.
Тогда тебе тем более рано браться за ввод двух и более семантически не различающихся чисел подряд. Сначала изучи массивы, потом переходи к задачам, в которых бывает несколько величин с общей семантикой.
1
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 53
15.04.2013, 12:22  [ТС] 14
taras atavin, кстати, решение
C++
1
if ((number_one < number_two)&&(number_two < number_three))
заработало. Спасибо
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.04.2013, 12:38 15
По мере роста количества элементов объём текста для ввода будет расти линейно, а количество вариантов не линейно, усложняя программу, а переменность количества элементов ставит под угрозу саму реализуемость. Но все проблемы решаются сами, если использовать массив, так как там можно за 1 раз сравнивать ровно 2 элемента при сортировке, или поиске экстремума, при поиске локального максимума 3 и при поиске перегиба 5 и вообще не менять порядок сравнения, что возвращает к линейной сложности для фиксированных размеров 2, 3 и 5, а количество элементов отлично будет регулироваться циклом. Другое дело, если надо сравнить 3 величины, различающиеся по смыслу задачи. Не number_one, number_two и number_three, а хотя бы, например, координаты по осям x, y и z, чьё сравнение даст оптимальный вид дроби и обратной функции для нахождения углов.
0
1 / 1 / 0
Регистрация: 09.02.2011
Сообщений: 53
15.04.2013, 13:08  [ТС] 16
Перечитаю, как-нибудь, 4ерез недельку)
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
16.04.2013, 05:20 17
Книга не даёт уровня, подход не верен. Книга только помогает, а учить язык надо на своих прогах. Прочитал, попробовал, потом придумал что то своё, тоже попробовал, пару раз ошибся, прочитал следующий кусок...
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
23.04.2013, 18:05 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
1
23.04.2013, 18:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2013, 18:05
Помогаю со студенческими работами здесь

Первые шаги: ничего не получается
Всем привет! Я скачала советуемую здесь на форуме версию wxDev-C++ 7.3.1. Но у меня ничего не...

Первые шаги: есть ли ошибки в программе?
#include &quot;iostream.h&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; int main() { float a,b,f; ...

Поделитесь опытом. С чего вы начинаете новый проект? Первые шаги?
Народ, поделитесь пож опытом.... Вот выучил я с++ до того уровня что могу сам написать что-то......

Вызов точки останова во время выхода (первые шаги в классах C++)
Парни! Такая проблема: вылетает в конце, когда завершаю работу программы. Суть программы: есть...

Первые шаги по базовому курсу Шилдта - ошибка синтаксиса приведенного кода
Здравствуйте! Изучаю С++ с нуля по учебнику Базовый курс С++ Шилдт. Каждую программу из примеров...

Как обнулить первые 4-е бита начиная с певого заряженного (первые - старшие биты)
Собственно, вопрос в заголовке.


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

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