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

ошибка в функции сложение по модулю два - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
IrishaIrinaChe
 Аватар для IrishaIrinaChe
28 / 28 / 1
Регистрация: 23.09.2010
Сообщений: 200
19.11.2010, 18:58     ошибка в функции сложение по модулю два #1
Доброго времени суток, форумчане!
в функции perv() закралась ошибка. мне нужно сложить по модулю два первую строку массива "а" с ключом key. однако, программа доходит до этого этапа и выдаёт окошко с ошибкой(что-то там с volation).
Помогите исправить ошибку пожалуйста!

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
119
120
121
122
123
124
125
126
127
//---------------------------------------------------------------------------
 
#include <vcl.h>
 
#pragma hdrstop
#include <stdio.h>
#include<iostream.h>
#include<windows.h>
#include <dos.h>
#include <conio.h>
#include<math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
 
#include<fstream.h>
#include<string.h>
 
const int block=6;  //кодирование блоками по 8 символов
const int Al=26;  //длина алфавита
char s[Al]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int cod[Al][block]={0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,
 0,0,1,1,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,0,0,0,0,1,1,0,1,0,0,1,1,1,0,0,0,1,1,
 1,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,1,1,1,0,
 1,1,0,0,0,0,1,1,0,0,1};
int **a;       //двоичное представление входящего сообщения. его не трогаем
int **arr;        //запасной массив
int key[block]={0,0,0,1,1,0};  //ключ
 
char bufRus[256];
 
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }
 
void perv() //операции для первого блока. сумма по модулю два с ключом
{
  int j;
 
  for(j=0;j<block;j++)
   arr[0][j]=pow(a[0][j],key[j]);    //получили первый блок
  for(j=0;j<block;j++)
   cout<<arr[0][j];
}
 
int main()
{
 cout << Rus("Привет ,Лопух!")<< endl;
 int i=100,j=0;
 cout<<"GOGOGOGO!!!\n" ;
 getch();
/* char *buf=new char[i];      //декларация массива для чтение строк в файле
 FILE *ifin;           //открытие файла для чтения
 ifin=fopen("C:\\Code.txt","r");
 if(!ifin)
 {          //если попытка не удалась
    puts("Ne mogu otkrut fail Code");
    getch();
    return 1;
 }
*/
 char *buf2=new char[i];      //декларация массива для чтение строк в файле
 FILE *ifin2;           //открытие файла для чтения
 ifin2=fopen("C:\\Out.txt","r");
 if(!ifin2)
 {              //если попытка не удалась
    puts("Ne mogu otkrut fail Out");
    getch();
    return 1;
 }
 
 i=0;
 while(!(feof(ifin2)))     //посчитали количество символов в файле с исходящим сообщением
 {
  fscanf(ifin2,"%c",&buf2[i]);   //считали символ входного сообщения
  i++;
 }
 cout<<"\nk="<<i<<"\n";
 int k=i-1;   //не считаем символ конца
 int **a=new int *[k];
 int **arr=new int *[k];
 for(i=0;i<k;i++)
 {
  a[i]=new int[block]; //переходный массив: строка-код буквы сообщения
  arr[i]=new int[block]; //запасной массив. все изменения храним в нём
 }
 i=0;
 int y;
 fseek(ifin2,0,SEEK_SET);    //указатель в начало файла
 fscanf(ifin2,"%c",&buf2[i]);  //счиатли первый символ
 while(!(feof(ifin2)))
 {
  cout<<buf2[i];    //буква сообщения
  for(j=0;j<Al;j++) //перебираем алфавит
   if(buf2[i]==s[j])
   {
    for(y=0;y<block;y++)
    {
      a[i][y]=cod[j][y];  //записываем код символа в переходный массив
      cout<<a[i][y];
    }
    cout<<".";
   }
  i++;
  fscanf(ifin2,"%c",&buf2[i]); //считали следующий символ входного сообщения
 }
 
 cout<<"\n";
 for(i=0;i<k;i++)
 {
  for(j=0;j<block;j++)
  cout<<a[i][j];
//  arr[i][j]=a[i][j];
 // cout<<".";
 }
 
 perv();
 
 getch();
// delete[]buf;
// fclose(ifin);
 delete[]buf2;
 delete[]a;
 delete[]arr;
 fclose(ifin2);
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2010, 18:58     ошибка в функции сложение по модулю два
Посмотрите здесь:

Написать класс чисел, для которых определено сложение и вычитание по модулю восьми C++
Написать программу, которая вводит с клавиатуры два натуральных числа и выполняет логическое умножение и сложение этих чисел C++
C++ Задать два числа как два массива и потом выполнить сложение, умножение и деление
C++ сложение по модулю 2(проблема с массивом bool)
Сложение по модулю (2^32) -1) C++
C++ Сложение по модулю 2 и разбиение массива на 8
Сложение по модулю 2 C++
Как выполнить сложение по модулю 2^64+13 C++
C++ Сложение по модулю 2
C++ Сложение по модулю 2
Умножить два целых числа используя сложение C++
Передача объектов функции. Два обращения к функции деструктора C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SimaLiveEvil
5 / 5 / 0
Регистрация: 02.05.2010
Сообщений: 40
19.11.2010, 20:13     ошибка в функции сложение по модулю два #2
насколько мне известно, функция pow() используется для возведения числа double float в степень double float... причем тут сложение по модулю два? используйте оператор побитового ксора ^
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.11.2010, 22:24     ошибка в функции сложение по модулю два #3
SimaLiveEvil, а вас не смущает, что ксор - это и есть сложение по модулю два?
SimaLiveEvil
5 / 5 / 0
Регистрация: 02.05.2010
Сообщений: 40
19.11.2010, 22:29     ошибка в функции сложение по модулю два #4
silent_1991, я в курсе, спасибо а я утверждал что это не так?

там просто автор использует функцию pow в месте, где должен быть ксор
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.11.2010, 22:31     ошибка в функции сложение по модулю два #5
ЫЫЫ... Понятно))) Я просто в код не вглядывался, основывался только на вашем сообщении (которое, будучи выдранным из контекста, оказывается противоречивым))) )
IrishaIrinaChe
 Аватар для IrishaIrinaChe
28 / 28 / 1
Регистрация: 23.09.2010
Сообщений: 200
20.11.2010, 14:45  [ТС]     ошибка в функции сложение по модулю два #6
ребята, спасибо) pow я использовала от отчаяния, т к с ^ не прокатило. оказалось, надо было всего лишь передать в функцию в качестве параметров массивы arr и a. я полагала, что объявив их глобально, передавать их не куда не нужно. теперь программа работает и с ^. всем спасибо за помощь)
Yandex
Объявления
20.11.2010, 14:45     ошибка в функции сложение по модулю два
Ответ Создать тему
Опции темы

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