Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Vero212
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 6
#1

Кодирование происходит криво

21.10.2013, 23:14. Просмотров 444. Ответов 3
Метки нет (Все метки)

Нужно сгенерировать ключ, с помощью этого ключа зашифровать текст из файла, записать полученный текст в новый файл, затем провести обратное действие. Не могу понять почему в ключе генерируются некоторые элементы повторно. Подскажите, пожалуйста))

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
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include<algorithm>
 
using namespace std; //файловые потоки ввода\вывода
ifstream ft("text.txt",ios::in);
ifstream alph("alphabet.txt",ios::in);//файл с алфавитом для заполнения массивов
fstream fts("text1.txt",ios::trunc|ios::out);//файл перезаписывается
ofstream ftss("text2.txt",ios::trunc|ios::out);//файл перезаписывается
ofstream fk("key.txt",ios::trunc|ios::out);//файл перезаписывается
char a[65];
char b[65];
char c[65];
int r = 66;
void main (void)
{
srand (time(NULL));
system("cls");
for(short i=0;i<=64;i++)//заполняем массивы
{
a[i]=alph.get(); //помещаем алфавит в рабочий массив
c[i]=a[i];
b[i]=a[i]; //заполняем стацион. массив алфавитом
}
alph.close();
std::random_shuffle(a,a+65);
for(short i=0; i<=64;i++) // перемешиваем массив
{
     short m = rand()%r;
std::swap(c[i],a[m]);
fk<<c[i];
 
for (short i=m; i<=r; i++); //удаление m-го элемента
{
    a[i] = a[i+1];
r--;
}
}
fk.close();
char ch;
while (!ft.eof()) // Пока не конец файла
{
ch=ft.get(); // Чтение посимвольно из файла ft
for (short i=0;i<=64;i++)
if (ch==b[i])
fts<<a[i];
}
ft.close();
fstream fts("text1.txt",ios::in);//переопределили для чтения
while (!fts.eof()) // Пока не конец файла
{
ch=fts.get(); // Чтение посимвольно из файла fts
for (short i=0;i<=64;i++)
if (ch==a[i])
    ftss<<b[i]; 
}
fts.close();
ftss.close();
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2013, 23:14
Ответы с готовыми решениями:

Криво работает do while
Есть рабочий код на паскале, var a, k, s, b, x1, x2, y1, y2, h: real; ...

Криво считывает из файла
Ситуация такая. Есть файл base.txt, там есть номера телефонов (по 11 символов...

Криво читается бинарник
Здравия желаю! #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; ...

Функиця криво работает
не могу понять в чем дело она не выводит весь текст.Нужно чтоб фунцкия два раза...

криво считает сумму
всё, кроме подсчёта суммы, работает правильно. need help! #include &lt;stdio.h&gt;...

3
Stella
75 / 75 / 10
Регистрация: 26.02.2013
Сообщений: 224
21.10.2013, 23:27 #2
потому что в a[m] в результате операции std::swap(c[i],a[m]); может попасть элемент, который там уже был, но вылетел.
0
Vero212
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 6
21.10.2013, 23:38  [ТС] #3
Как это можно исправить?

Разве этот цикл не выбрасывает элемент a[m]?

C++
1
2
3
4
5
for (short i=m; i<=r; i++); //удаление m-го элемента
{
    a[i] = a[i+1];
r--;
}
0
FiLF
54 / 54 / 37
Регистрация: 05.09.2013
Сообщений: 1,866
23.10.2013, 02:58 #4
Цитата Сообщение от Vero212 Посмотреть сообщение
C++
1
for (short i=m; i<=r; i++); //удаление m-го элемента { a[i] = a[i+1]; r--; } }
C++
1
2
3
4
5
6
for (short i=m; i<=r; i++); //удаление m-го элемента
{
    a[i] = a[i+1];
}
r--;
}
И начальное значение r замените на 64, чтобы не копировать мусор в Ваш массив.

Добавлено через 6 секунд
Цитата Сообщение от Vero212 Посмотреть сообщение
C++
1
for (short i=m; i<=r; i++); //удаление m-го элемента { a[i] = a[i+1]; r--; } }
C++
1
2
3
4
5
6
for (short i=m; i<=r; i++); //удаление m-го элемента
{
    a[i] = a[i+1];
}
r--;
}
И начальное значение r замените на 64, чтобы не копировать мусор в Ваш массив.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 02:58

криво считает произведение
всё, кроме произведения, работает правильно #include &lt;stdio.h&gt; #include...

Rand в матрице работает криво.
Делаю программу на заполнение матрицы случайными числами, к примеру . ...

Потоки в винде. Работает, но криво
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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