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

Разобрать работу приведенного кода - C++

Восстановить пароль Регистрация
 
stepa3800
2 / 2 / 0
Регистрация: 10.12.2013
Сообщений: 41
18.01.2014, 18:35     Разобрать работу приведенного кода #1
помогите написать что делают строки в программе
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
#include <iostream>
#include <string>
#include <cmath>
 
using namespace std;
 
int main(){
  string num1; // число в двоичной системе
  double num1_dec=0;
  string num2; //число в восьмеричной системе
  double num2_dec=0;
  int i=0;
  cout << "vvedi chislo (2): ";
  cin >> num1;
  cout << "vvedi chislo(8): ";
  cin >> num2;
 
  i=0;
  int pow1=0;
  while (num1[i])
  {
    if (num1[i]=='.') {
      i++;
      continue;
    }
    if (pow1>0 || (i>0 && num1[i-1]=='.'))
    {
      pow1++;
    }
    num1_dec*=2;
    num1_dec+=num1[i]-'0';
    i++;
  }
  num1_dec = num1_dec / pow(2,pow1);
 
 
  i=0;
  int pow2=0;
  while (num2[i])
  {
    if (num2[i]=='.')
    {
      i++;
      continue;
    }
    if (pow2>0 || (i>0 && num2[i-1]=='.'))
    {
      pow2++;
    }
    num2_dec*=8;
    num2_dec+=num2[i]-'0';
    i++;
  }
 
  num2_dec = num2_dec / pow(8,pow2);
 
 
  cout<<num1<<" (2) * "<<num2<<" (8) = "<< (num1_dec*num2_dec) << " (10)"<<endl;
  return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
18.01.2014, 23:21     Разобрать работу приведенного кода #2
Цитата Сообщение от stepa3800 Посмотреть сообщение
помогите написать что делают строки в программе
В строках хранятся у тебя числа в первой - в двоичной системе, а во второй - в восьмеричной системе. Циклы каждую из строк преобразуют в число при этом уже в десятичной системе. А на печать выводится их произведение в десятичной системе координат.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.01.2014, 02:35     Разобрать работу приведенного кода #3
Скажи, а разве гарантируется, что строки std::string завершаются нулевым символом?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.01.2014, 10:36     Разобрать работу приведенного кода #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а разве гарантируется, что строки std::string завершаются нулевым символом?
ISO/IEC 14882 21.4.5/2:
C++
1
2
const_reference operator[](size_type pos) const;
reference operator[](size_type pos);
Returns: *(begin() + pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified.
Т.е. если обратится по индексу, равному размеру, то получим ссылку на элемент, созданный конструктором по умолчанию. В данном случае char(), т.е. нулевой символ.
stepa3800
2 / 2 / 0
Регистрация: 10.12.2013
Сообщений: 41
19.01.2014, 10:42  [ТС]     Разобрать работу приведенного кода #5
можете помочь оформить эту лабу на подобие этого
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
#include <iostream>//ввод вывод в консоль
#include <string>//класс string
#include <conio.h>//работа с консолью в старых компиляторах
#include <fstream> // fstream - чтение/запись из/в файл
 
using namespace std;
 
int main(){
  fstream file;//создаем объект fstream
  string chars;//создаем объект string
  file.open("input1.txt", fstream::in);//открываем файл input1.txt для чтения
  file>>chars;//считываем файл в chars
  int i=0;//индекс символа в chars
  char w;//новый символ
   while(chars[i]) //пока не достигнут конец строки chars
    {
        w=2*(chars[i++]-8-8)*2; // производим арифметические операции с кодом символа и переходим к следующему символу (постинкремент i++)
        cout<<w<<endl; // выводим что получилось в консоль
  }
getch();//для того чтобы консоль не закрылась
  file.close();//закрываем файл
 
return 0;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.01.2014, 11:05     Разобрать работу приведенного кода #6
Цитата Сообщение от stepa3800 Посмотреть сообщение
можете помочь оформить эту лабу на подобие этого
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
#include <cmath>
 
using namespace std;
 
int main(){
  string num1; // число в двоичной системе в виде строки
  double num1_dec=0; // двоичное число преобразованное в десятичное
  string num2; //число в восьмеричной системе в виде строки
  double num2_dec=0; // восьмеричное число преобразованное в десятичное
  int i=0; // переменная для прохода по строке
  cout << "vvedi chislo (2): ";
  cin >> num1; 
  cout << "vvedi chislo(8): ";
  cin >> num2;
 
  i=0;
  int pow1=0;
  while (num1[i]) // Попадаем в цикл, пока не встретим нулевой символ
  {
    if (num1[i]=='.') { // Если встретили точку, то переходим к следующей итерации
      i++; 
      continue;
    }
    if (pow1>0 || (i>0 && num1[i-1]=='.'))
    {
      pow1++; // Считаем кол-во разрядов после точки
    }
    num1_dec*=2; // увеличиваем вес прочитанных чисел (на основании системы счисления)
    num1_dec+=num1[i]-'0'; // получаем число из символа и прибавляем его к результату 
    i++;
  }
  num1_dec = num1_dec / pow(2,pow1); // получаем вещественное число с учетом знаков после точки
 
 
  i=0;
  int pow2=0;
  while (num2[i])
  {
    if (num2[i]=='.')
    {
      i++;
      continue;
    }
    if (pow2>0 || (i>0 && num2[i-1]=='.'))
    {
      pow2++;
    }
    num2_dec*=8;
    num2_dec+=num2[i]-'0';
    i++;
  }
 
  num2_dec = num2_dec / pow(8,pow2);
 
  // Умножение двоичного числа на восьмиричное и вывод результата в десятичном виде
  cout<<num1<<" (2) * "<<num2<<" (8) = "<< (num1_dec*num2_dec) << " (10)"<<endl;
 
  return 0;
}

Для восьмиричной части всё аналогично.
stepa3800
2 / 2 / 0
Регистрация: 10.12.2013
Сообщений: 41
19.01.2014, 11:08  [ТС]     Разобрать работу приведенного кода #7
Tulosba, Большое спасибо.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.01.2014, 13:56     Разобрать работу приведенного кода #8
Tulosba, если уж придираться к твоей цитате стандарта, то можно сделать вывод, что ноль будет возвращаться вообще при обращении по любому индексу, не меньшему size.
Так?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 14:59     Разобрать работу приведенного кода
Еще ссылки по теме:

C++ For each с массивом символов - выяснить причину неработоспособности приведенного кода
Разобрать код, демонстрирующий работу с указателями C++
Разобрать строку кода C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.01.2014, 14:59     Разобрать работу приведенного кода #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Так?
Не так. Цитата в данном случае не претендует на полноту.
21.4.5/1 Requires: pos <= size().
Скачай уже себе копию стандарта наконец
Yandex
Объявления
19.01.2014, 14:59     Разобрать работу приведенного кода
Ответ Создать тему
Опции темы

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