Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cоздание и использование модулей в С++, помогите исправить ошибки 
:(
    Опции темы
magnolija
  Дата 9.12.2004, 17:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нужно создать модуль с арифметическими операциями
например вычисления суммы чисел A и B длины n

Число представляется как массив

Вот что я делала:

1. Создала такой файл с телом модуля digits.c
Цитата

#include "digits.h"
DIGIT Add(DIGIT C[], const DIGIT A[], const DIGIT B[], int n)
{
TWODIGIT T;
DIGIT d = 0;
int i;
for (i = 0; i < n; i++)
  {
  T = (TWODIGIT)A[i] + B[i] + d;
  C[i] = LODIGIT(T);
    d = HIDIGIT(T);
}
return d; }


2. Заголовочный файл модуля digits.h:
Цитата

#ifndef DIGITS_H
#define DIGITS_H 1

#define LODIGIT(T)((DIGIT)(T))
#define HIDIGIT(T)((DIGIT)((T)>>8))

typedef unsigned __int8 DIGIT;
typedef unsigned __int16 TWODIGIT;

DIGIT Add(DIGIT C[], const DIGIT A[], const DIGIT B[], int n);

#endif


3. основная программа:
Цитата

#include <iostream>
#include <conio.h>
#include "digits.h"

void main() {
        const int N=5;
        DIGIT REZ[N];
        DIGIT PIR[N];
        DIGIT ANT[N];

        cout << "vvod pervogo cisla:\n";
    int ch;
    for(int i=0;;i++){
    cin>>ch;
    if(ch==-1)break;
      PIR[i]=ch;
    };

        cout << "vvod vtorogo cisla:\n";
    //cin >> str2;
    for(int i=0;;i++){
    cin>>ch;
    if(ch==-1)break;
      ANT[i]=ch;
    };

        DIGIT Add(DIGIT REZ[], const DIGIT PIR[], const DIGIT ANT[], int N);

        cout << "Rezultat: ";
        int k=0;
        for (int i=N-1;i>=k;i--)      //vyvod rezultata;
      { cout <<int(REZ[i])<<' ';  }
            cout << "\n";
        }
        getch(); }



Все вроде работает, но в результате выводется 0.


Помогите разобраться что сделано не так.

  Вверх
alien_by
Дата 9.12.2004, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 29.11.2004
Где: Belarus/Gomel

Репутация: нет
Всего: 8



Непонятная конструкция в основной программе.
Код

      DIGIT Add(DIGIT REZ[], const DIGIT PIR[], const DIGIT ANT[], int N);


Видимо нодо написать
Код

      Add(REZ, PIR, ANT, N);


Если этот код компилируется(???), то возможно компилятор полагает, что обьявляются новые локальные переменные!!!

PM MAIL ICQ   Вверх
srd
Дата 9.12.2004, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Цитата(alien_by @ 10.12.2004, 03:31)
Непонятная конструкция в основной программе.
Код

      DIGIT Add(DIGIT REZ[], const DIGIT PIR[], const DIGIT ANT[], int N);


Видимо нодо написать
Код

      Add(REZ, PIR, ANT, N);


Если этот код компилируется(???), то возможно компилятор полагает, что обьявляются новые локальные переменные!!!

Это просто прототип функции. Если в таком виде не понятно, представь, что написано так:
Код

DIGIT Add(DIGIT *REZ, const DIGIT *PIR, const DIGIT *ANT, int N);

Непонятно, почему выводится 0. По идее должен выводиться мусор, каждый раз разный smile

Это сообщение отредактировал(а) srd - 9.12.2004, 19:44


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
ufo
Дата 10.12.2004, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 4.11.2004

Репутация: нет
Всего: нет



А зачем в основной программе прототип той функции которая есть в хеадере? это глюк.
magnolija, это будет так:
Код

#include <iostream>
#include <conio.h>
#include "digits.h"

void main() {
       const int N=5;
       DIGIT REZ[N];
       DIGIT PIR[N];
       DIGIT ANT[N];

       cout << "vvod pervogo cisla:\n";
   int ch;
   for(int i=0;;i++){
   cin>>ch;
   if(ch==-1)break;
     PIR[i]=ch;
   };

       cout << "vvod vtorogo cisla:\n";
   //cin >> str2;
   for(int i=0;;i++){
   cin>>ch;
   if(ch==-1)break;
     ANT[i]=ch;
   };
  Add(REZ, PIR, ANT, N);
       cout << "Rezultat: ";
       int k=0;
       for (int i=N-1;i>=k;i--)      //vyvod rezultata;
     { cout <<int(REZ[i])<<' ';  }
           cout << "\n";
       }
       getch(); }

и не надо указывать в хеадере
Код

const DIGIT A[], const DIGIT B[]

зачем тебе константа?
пиши просто
Код

DIGIT A[], DIGIT B[]

если все же нужны const то меня и основную прогу соответстующим образом.
кстате ты начем все это писал? какой компилятор? VC чтоль? а то мой gcc нелюбит такой код smile
так что за работоспособность приведенного мною кода я не ручаюсь smile

Это сообщение отредактировал(а) ufo - 10.12.2004, 16:21
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.