[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Вопрос: почему переменной типа int можно присвоить чаровское (буквенное значение) и операция выполнится? почему не произойдет ошибки?
     
  2. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    Потому что тип int по размеру больше чем char.
     
  3. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Где про это можно почитать подробней?
     
  4. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Ты присваиваешь типу int ASCI код символа:

    Code:
    //////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////
    #include <iostream>
    using std::cout;
    using std::endl;
    //////////////////////////////////////////////////////////////////////////
    int main( int argc, char * argv[] )
    	{
    	int var = 'a';
    	cout << var << endl;
    	return 0;
    	}
    //////////////////////////////////////////////////////////////////////////
    
    В данном случае ASCI код символа 'a' равен 97.
     
    #5064 Ins3t, 16 Apr 2010
    Last edited: 16 Apr 2010
  5. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    _http://www.languagec.info/preobr_tipov.php
    _http://www.cppnet.ru/c/tipdan.html
     
  6. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    Например, С.Прата - Язык программирования C++.Лекции и упражнения

    см. 3ю главу
     
  7. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    что-то не сходится... если сразу ввести первое значение аски символом то программа не предлагает ввести 2 число а просто выводит ответ не соответствующий номерам аски.
     
  8. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Не совсем понял.
    Куда вводишь?

    Code:
    //////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////
    #include <iostream>
    using std::cout;
    //////////////////////////////////////////////////////////////////////////
    int main( int argc, char * argv[] )
    	{
    	cout << static_cast<int>('c') << " = " << static_cast<char>(99);
    	return 0;
    	}
    //////////////////////////////////////////////////////////////////////////
    
    Все сходится.

    ---

    UPD:
    Или же, если ты хотел получить аски нескольких символов:

    Code:
    //////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////
    #include <iostream>
    using std::cout;
    using std::endl;
    using std::cin;
    //////////////////////////////////////////////////////////////////////////
    int main( int argc, char * argv[] )
    	{
    	char var[256];
    	cin.getline( var, 255 );
    
    	for( int i = 0; i < strlen( var ); i++ )
    		{
    		cout << var[i] << " = " << static_cast<int>( var[i] ) 
    			<< endl;
    		}
    
    	return 0;
    	}
    //////////////////////////////////////////////////////////////////////////
     
    #5068 Ins3t, 16 Apr 2010
    Last edited: 16 Apr 2010
  9. Neith

    Neith New Member

    Joined:
    14 Feb 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Здраствуйте Товарищи!
    Объясните такую вещь.. Почему переменной (float) нельзя присвоить результат деления двух int переменных (например 5 и 7), чтобы результат получился дробный? Как выход, приходиться менять тип какой-нибудь одной или обеих int переменных на float. Другими словами, если для такой операции нужны float переменные, то почему нет какой-то строгости чтобы, например, обе переменные были типа float?
    ПС. Использую VC++ 6.0
     
    #5069 Neith, 16 Apr 2010
    Last edited: 16 Apr 2010
  10. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    Потому что тип int предназначен для хранения целых чисел, и соответственно при делении двух переменных типа int в результате получается целое число - дробная часть отбрасывается.
     
    #5070 fluffylion, 16 Apr 2010
    Last edited: 17 Apr 2010
  11. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Есть такой код
    Code:
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	int integer1, integer2, sum;
    	cout << "введите первое число \n";
    	cin >> integer1;
    	cout << "Введите второе число \n";
    	cin >> integer2;
    	sum = integer1 + integer2;
    	cout <<"Сумма равна" << sum <<endl;
    	return 0;
    }
    Если integer1 приравнять (ввести) аски символ то вы полняются все строки кода кроме cin >> integer2;/
    Sum в таком случае приравнивается к отрицательному числу.
     
  12. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    чтобы делить с остатком инты их надо приветси к флоэту

    float result = static_cast<float>int1 / static_cast<float>int2;
     
  13. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Code:
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    unt main()
    {
    	setlocale( 0, "Rus" );
    	int num1, num2;
    	cout << "Введите первое число\n";
    	cin >> num1;
    	cout << "Введите второе число\n";
    	cin >> num2;
    	cout << "Проведем простейший анализ файла\n";
    	if (num1 == num2)
    		cout << num1 << " Равно " << num2 << endl;
    	if (num1 != num2)
    		cout << num1 << " не равно " << num2 << endl;
    	if (num1 < num2)
    		cout << num1 << " меньше " << num2 << endl;
    	if (num1 > num2)
    		cout << num1 << " больше " << num2 << endl;
    	cout << "Сумма этих чисел равна :\n" << num1 + num2 << endl;
    return 0;
    }
    И где можно прочитать про разницу старых книг и нового (измененого) синтаксиса языка?
     
  14. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    В данном случае cin >> будет безошибочно считывать только цифровые символы, т.к. значение переменной, куда будет записан результат имеет тип int. Если же ввести например 123a, то integer1 будет равен 123, символ 'a' не учтется. При этом также будет установлен бит ошибки (failbit) и следовательно выражение cin >> integer2; не выполнится, так как установлен один из битов состояния потока (cin). Отрицательное или некорректное значение в sum при неправильном вводе получается из-за того, что локальные переменные при создании не обнуляются.
     
  15. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    http://www.cplusplus.com/doc/tutorial/
    имхо лучший тутор, на англ. языке
     
  16. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    int main()
     
  17. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    тфу спасибо, я описался =)
    и спасибо за разяснение!
     
  18. qwert135

    qwert135 New Member

    Joined:
    22 Nov 2009
    Messages:
    53
    Likes Received:
    0
    Reputations:
    0
    всем привет.народ,подскажите плиз,как на С++ возводить отрицательное число в степень.прост я знаю как это сделать только через ln, а с отрицательными эт не прокатывает
     
  19. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    В math.h (cmath) есть функции pow и powl.

    Или же нижеследующая функция (не учитывает переполнение):
    Code:
    int pow(int nNumber, unsigned int unP)
    {
           int nRes = 1;
           if (nNumber != 0)
           {
                  while (unP--)
                         nRes *= nNumber;
           }
           else
                  nRes = 0;
           return nRes;
    }
    
     
  20. qwert135

    qwert135 New Member

    Joined:
    22 Nov 2009
    Messages:
    53
    Likes Received:
    0
    Reputations:
    0
    fluffylion, спасиб, но уже сам разобрался.Вопрос конечно не в тему, но может у кого учебник есть или сайт какой знаете, где описано нахождение экстремума функции методом двух касательных,насколько я понял это же метод Ньютона
     
Thread Status:
Not open for further replies.