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

Сложение и вычитание поэлементно... - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ стандартная библиотека http://www.cyberforum.ru/cpp-beginners/thread55695.html
Здравствуйте!!! Хотел бы узнать сколько стандартных библиотек есть в с++ ?? И хотел бы увидеть их список и комментарии к ним(т.е для чего она служит эта библиотека)?? Заранее всем спасибо!!!
C++ Классы в С++ Помогите пожалуйста решить задачу: Создайте класс "трехмерная точка". Данные класса должны быть представлены тремя полями: координатами точки в трехмерном пространстве. Класс должен содержать конструктор по умолчанию, конструктор, инициализирующий координаты точки заданными значениями. Обязательными являются методы, возвращающие значения полей, изменяющие эти значения, метод выводящий точку на... http://www.cyberforum.ru/cpp-beginners/thread55693.html
вывод таблицы из файла C++
помогите сделать вывод всего файла. вывод первых двух столбцов вроде нормально работает,вместо последних двух ставится значение из последней строки. как исправить? #include <stdio.h> #include <conio.h> int main(void) {clrscr(); FILE * My_Potok; int i; char Answer = 'v';
C++ Ошибка с оператором
Ребят помогите не могу вдуплить только начал изучать С++ и при написании программы посчета слов в файле выдает ошибку (недопустимый else без парного if) #include "stdafx.h" #include <stdio.h> #include <conio.h> #define eof -1 #define yes 1 #define no 0
C++ Определитель n-ого порядка (непорядок с рекурсией) http://www.cyberforum.ru/cpp-beginners/thread55673.html
Всем доброго времени суток! Написал программу, которая должна считать определитель заданного порядка разложением на миноры. Вроде уже дописал программу, но при проверке понял, что прога правильно считает только второго порядка определители, где происходит только один рекурсивный вызов. При всех остальных порядках прога, разложив наконец до числа, этим не удовлетворяется и снова раскладывает...
C++ Что за код ? Подскажите кто знает что выполняет данный код . #define CWS_FIRSTCMDNO 0xe0 typedef enum { MSG_CLIENT_2_SERVER_LOGIN = CWS_FIRSTCMDNO, MSG_CLIENT_2_SERVER_LOGIN_ACK, MSG_CLIENT_2_SERVER_LOGIN_NAK, MSG_CARD_DATA_REQ, MSG_CARD_DATA, MSG_SERVER_2_CLIENT_NAME, подробнее

Показать сообщение отдельно
Том Ардер
Модератор
Эксперт по математике/физике
3705 / 2318 / 286
Регистрация: 15.06.2009
Сообщений: 4,100
11.10.2009, 20:30     Сложение и вычитание поэлементно...
Цитата Сообщение от Jekanchik Посмотреть сообщение

for (i=0;n-1-i>i;i++) // perevorot massiva
{mas[n-1-i]=mas[i]+mas[n-1-i];
mas[i]=mas[n-1-i]-mas[i];
mas[n-i-1]=mas[n-1-i]-mas[i];}
int summ[300];
{
for (i=0; i<n; i++)
for (j=0; j<m; j++)
for (k=0; k<n; k++)
{
summ[k]=mas[i]+mas2[j];
cout<<summ[k];
kol++;
if (summ[k]>10) {summ[k]=fmod(summ[k],10);summ[k+1]=summ[k+1]+1;}
}
}

[/CPP]
Эти конструкции я просто не понимаю. Зачем так усложнять?

Ввести две строки цифр
Преобразовать их в числовые массивы
Сложить поэлементно, начиная с младших разрядов, при необходимости выравнивая длины массивов.
Вывести полученный массив цифр

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <stdlib.h>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
const int nSize = 300;
 
typedef short (*Ptr2Dim)[nSize];    // multidimensional array as function parameter
                                    // [url]http://support.microsoft.com/kb/43703[/url]
 
void InputNumber(int Index, char* pszNumber);
int TransformNumber(char* pszNumber, short* pnOperand);
int Add(int* pnDigits, Ptr2Dim pnOperands, short* pnResult);
void Adjust(short* pnOperand, int nDigits, int nMaxDigits );
void Output(int nDigits, short* pnResult);
 
int main(int argc, char* argv[])
{
    char    szNumbers[2][nSize];    // исходные строки-числа
    short   nOperands[2][nSize];    // числа как массивы цифр
    short   nResult[nSize+1];
    int     nDigits[2];             // к-во цифр в каждом числе
 
    InputNumber( 1, szNumbers[0] );
    InputNumber( 2, szNumbers[1] );
 
    nDigits[0] = TransformNumber( szNumbers[0], nOperands[0] );
    nDigits[1] = TransformNumber( szNumbers[1], nOperands[1] );
 
    int nResultSize = Add( nDigits, nOperands, nResult );
 
    Output( nResultSize, nResult );
 
    return 0;
}
 
void InputNumber(int Index, char* pszNumber)
{
    cout << "Input number # " << Index << " ";
    cin >> pszNumber;
}
 
// преобразование строки символов в массив цифр
//
int TransformNumber(char* pszNumber, short* pnOperand)
{
    int nLen = strlen(pszNumber);
 
    for( int j = 0; j < nLen; j++ )
    {
        pnOperand[j] = pszNumber[j] - '0';  // '0' = 48 не во всех кодировках
    }
 
    return nLen;
}
 
int Add(int* pnDigits, Ptr2Dim pnOperands, short* pnResult)
{
    if( pnDigits[0] != pnDigits[1] )                // разное к-во цифр
    {
        // выравнивание меньшего числа
        //
        if( pnDigits[0] > pnDigits[1] )             //
        {
            Adjust( pnOperands[1], pnDigits[1], pnDigits[0] );
        }
        else
        {
            Adjust( pnOperands[0], pnDigits[0], pnDigits[1] );
        }
    }
 
    int nResultSize = __max( pnDigits[0], pnDigits[1] );
    short nOver = 0;                                // перенос в следующий разряд
 
    for( int j = 0; j < nResultSize; j++ )
    {
        short   digit1 = pnOperands[0][nResultSize-1-j];
        short   digit2 = pnOperands[1][nResultSize-1-j];
        
        pnResult[nResultSize-j] = (digit1 + digit2) % 10 + nOver;
        nOver = (digit1 + digit2) / 10;
    }
    pnResult[0] = nOver;
 
    return ++nResultSize;   // пример: 46 + 85 = 131
}
 
// выравнивание числа вправо и заполнение нулями слева
//
void Adjust(short* pnOperand, int nDigits, int nMaxDigits )
{
    for( int j = 0; j < nDigits; j++ )
    {
        pnOperand[nMaxDigits-1-j] = pnOperand[nDigits-1-j];
    }
    for( j = 0; j < nMaxDigits - nDigits; j++ )
    {
        pnOperand[nMaxDigits-nDigits-1-j] = 0;
    }
}
 
void Output(int nDigits, short* pnResult)
{
    cout << "Result = ";
 
    int nStart = 0;
 
    if( pnResult[0] == 0 )      // skip 1-st zero
        nStart = 1;
 
    for( int j = nStart; j < nDigits; j++ )
    {
        cout << setw(1) << pnResult[j];
    }
    cout << endl;
}
Вложения
Тип файла: zip w32console.zip (3.9 Кб, 12 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru