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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
IrishaIrinaChe
28 / 28 / 1
Регистрация: 23.09.2010
Сообщений: 203
#1

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

19.11.2010, 18:58. Просмотров 1299. Ответов 5
Метки нет (Все метки)

Доброго времени суток, форумчане!
в функции 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2010, 18:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ошибка в функции сложение по модулю два (C++):

Сложение по модулю 2 - C++
Здраствуйте! Подскажите пожалуйста,Есть два массива, нужно сложить их по модулю 2, не могу придумать как. #include &quot;stdafx.h&quot; ...

Сложение по модулю 2 - C++
Здравствуйте, помогите реализовать программу, которая будет принимать вводимый текст, преобразовывать его в шестнадцатеричную систему через...

Сложение по модулю 2 - C++
Лёгкий шок, внезапно во второй массив результатом побитового сложения по модулю 2 стал заноситься мусор... а ведь работало, может условия...

Сложение по модулю (2^32) -1) - C++
Добрый вечер! Подскажите как реализовать сложение по модулю ((2^32) -1). Есть текстовый файл. Я считываю его, перевожу считанные данные в...

Задать два числа как два массива и потом выполнить сложение, умножение и деление - C++
Здравствуйте! Суть задачи в следующем: Нужно задать два числа как два массива и потом выполнить сложение, умножение и деление с помощью...

Как выполнить сложение по модулю 2^64+13 - C++
Всем привет, есть два 64 битовых числа, как можно сделать сложение по модулю mod(2^64+13)?

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

там просто автор использует функцию pow в месте, где должен быть ксор
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
19.11.2010, 22:31 #5
ЫЫЫ... Понятно))) Я просто в код не вглядывался, основывался только на вашем сообщении (которое, будучи выдранным из контекста, оказывается противоречивым))) )
0
IrishaIrinaChe
28 / 28 / 1
Регистрация: 23.09.2010
Сообщений: 203
20.11.2010, 14:45  [ТС] #6
ребята, спасибо) pow я использовала от отчаяния, т к с ^ не прокатило. оказалось, надо было всего лишь передать в функцию в качестве параметров массивы arr и a. я полагала, что объявив их глобально, передавать их не куда не нужно. теперь программа работает и с ^. всем спасибо за помощь)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2010, 14:45
Привет! Вот еще темы с ответами:

Сложение по модулю 2 и разбиение массива на 8 - C++
Два одномерных массива по 48 бит сложить по модулю два и разбить на 8 частей (отдельных массивов). Сложило, первые 6 бит занесло верно, а...

сложение по модулю 2(проблема с массивом bool) - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; int main(){ int i; bool m; bool k; bool e;...

Написать класс чисел, для которых определено сложение и вычитание по модулю восьми - C++
Задачки легкие, но буду очень признателен, если кто-нибудь поможет.:help: 2) Написать класс чисел, для которых определено сложение и...

Сложить два двоичных числа по модулю 2 - C++
Здравствуйте. Нужен код сложения двух двоичных чисел по модулю 2. Нужно сложить два числа так, чтобы сложение по модулю два...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
20.11.2010, 14:45
Ответ Создать тему
Опции темы

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