/*
* Цю програму написав ГВА
* 20.03.2011 22:31
* Якщо ви берете код цієї програми, чи просто вивчаєте його
* то ви повинні мені допомогти з
* іншими предметами, чим можете, розшарити в англійській мові, матані, фізиці,
* молекулярці і т.д.. Чи допомогти написати якось контрольну ))
* Дякую за розуміння.
* Друга група. Лаба 3. Шифрування.
* Робить майже на відмінно.
* Проблеми: Дописує лишній символ в кінець. Не вистачає часу для того щоб розібратись
* Не перевіряється умова переповнення межі. Байт має межі[-128;127].
* Не відомо що буде коли зайде за межі... перевіряйте самі... а так
* взагалі працює на ключах від -30 до +30
*/
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <strings.h>
#include <conio.h>
#include <iostream>
using namespace std;
void encoding(char *in, char *key, char *out)
{
ifstream f_in(in, ios::in | ios::binary);
ofstream f_out(out, ios::out | ios::binary);
if ( !f_in || !f_out ) {
cout << "ERROR of opening of a file.\n"; system("PAUSE"); return ;
}
char buf;
while (!f_in.eof()) {
f_in.read(&buf,1);
buf=buf+atoi(key);
f_out.write(&buf,1);
// cout<<buf;
}
f_in.close();
f_out.close();
cout<<"\n\n -> Encoding complate!\n\n";
}
void dencoding(char *in, char *key, char *out)
{
ifstream f_in(in, ios::in | ios::binary);
ofstream f_out(out, ios::out | ios::binary);
if ( !f_in || !f_out ) {
cout << "ERROR of opening of a file.\n"; system("PAUSE"); return ;
}
char buf;
while (!f_in.eof()) {
f_in.read(&buf,1);
buf=buf-atoi(key);
f_out.write(&buf,1);
// cout<<buf;
}
f_in.close();
f_out.close();
cout<<"\n\n -> Encoding complate!\n\n";
}
void k_read(char a[],char *b){
cout<<a<<" : ";
cin>>b;
}
int main(int argc, char *argv[])
{
char *in_filename=new char[80];
char *out_filename=new char[80];
char *key=new char[10];
char userkey;
do
{
system("cls");
cout<<"Group 2. Laba#3. Variant #9. by Gorbachenko V.A\
\nPress 1 to ecode\
\nPress 2 to decode\
\nYour choise : ";
do{
userkey=getch();
}while (userkey!='1' && userkey!='2');
cout<<userkey<<endl;
k_read("Enter IN filename",in_filename);
k_read("Enter KEY [INT ONLY]",key);
k_read("Enter OUT filename",out_filename);
if (userkey=='1'){
encoding(in_filename,key,out_filename);
}
else
{
dencoding(in_filename,key,out_filename);
}
cout<<"Press ESC to EXIT or other key to CONTINUE..."<<endl;
} while (getch()!=27);
system("PAUSE");
return 0;
}
/* Ефименко. Лаба 3. Варіант 8
* Написати функцію, яка повертає число, одержане з цілого числа х, в якому
* інвертовані n розрядів, починаючи з позиції p, а решта розрядів залишені
* без змін (крайній правий біт вважити нульовим). Перевіряти правильність
* значень n та p.
*/
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
// підключаємо все необхідне для роботи програми
void print_bits (unsigned n)
{ // функція друкує біти, функція з лекії
int bit; // змінна, в якій буде знаходитись поточне значення кількості бітів
for (bit = sizeof(n)*8-1; bit >= 0; bit--)
// початкове значення bit = довжина змінної unsigned
{
if ((n >> bit) & 01)
{ // тут іде логічне множення... складно пояснити, але спробую...
// (n >> bit) - здвигає на "bit" розрядів
// & 01 - логічне множення - тобто, грубо кажучи кусає правіший біт
// тут іде побітове множення(чи просто кажучи побітове "і"), для прикладу:
// 10101110001101
// & побітове "і"
// 00000000000001 тобто тут насправді (01)
// =
// 00000000000001 - цей результат позитивний, тобто більше нуля,
// а значить, грубо кажучи == TRUE
putchar ('1');
}
else
{// іначе 0 - наприклад:
// 011010
// &
// 000001
// =
// 000000 - == FALSE або нулю - негативний
putchar ('0');
}
if (bit % 4 == 0) putchar (' '); // якщо біт, на якому стоїть лічильник кратний чотирьом, то ставимо пробіл
}
cout<<endl; // перевод на нову строчку
}
unsigned replace_bits (unsigned x, unsigned p, unsigned n)
{
unsigned mnoj=0, z;
int bit; // змінна, в якій буде знаходитись поточне значення кількості бітів
for (bit = sizeof(n)*8-1; bit >= 0; bit--)
{
// cout<<mnoj<<endl;
// if ((n >> bit) & 01)
// cout<<((x>>bit) & 01);
// print_bits(z);
if (bit>=p && bit<p+n)
{
z=((~(x>>bit) & 01));
mnoj=(mnoj<<1) | z;
}
else
{
z=(((x>>bit) & 01));
mnoj=(mnoj<<1) | z;
}
}
cout<<endl;
return mnoj;
}
main ()
{
unsigned num; // створюємо цілу беззнакову 4-байтову змінну
cout << "Input X" << endl; // підсказка користувачу
cin >> num; // зчитуємо число
print_bits (num); // друкуємо біти
int n,p;
do
{
cout << " Enter P [numeracia s nula]: " ; // підказка користувачу
cin >> p; // зчитуємо число
if (p<0) {cout<<" -> ERROR : P must be >=0"<<endl;}
} while (p<0);
do
{
cout << " Enter N : " ; // підказка користувачу
cin >> n; // зчитуємо число
if (n<=0) {cout<<" -> ERROR : N must be >=1"<<endl;}
} while (n<=0);
unsigned result = replace_bits (num,p,n); // виводимо кількість пар бітів
print_bits (result); // друкуємо біти
system ("PAUSE");
return 0;
}
/* Лаба 4. Варіант 4 Матриці */
#include <iostream>
#include <cstdlib> // тут rand (), srand ()
#include <stdio.h>
#include <conio.h> //
using namespace std; // підключаємо все необхідне для роботи програми
void PrintMas(double *A,int n){// ДрукМатриці. Приймає вказівник на перший
//елемент масиву і кількість елементів
for (int i = 0 ; i < n ; i++){
for (int j = 0 ; j < n ; j++){
cout<<*(A+i*n+j)<<"\t ";
}
cout<<endl;
}
cout<<endl;
return ;
}
void EnterMas(double *A,int n){// Заповнення матриці з клави. Парам.аналог.якв^^
for (int i = 0 ; i < n ; i++){
for (int j = 0 ; j < n ; j++){
cout<<"Enter Matrix ["<<j+1<<"]x["<<i+1<<"] = ";
cin>>*(A+i*n+j);
}
}
return ;
}
void FillBMas(double *B,int n){ // Заповнює матрицю B. Параметри аналогічні ^^
for (int i = 0 ; i < n ; i++){
for (int j = 0 ; j < n ; j++){
if (1<=i && i<=j && j<=n){ // якщо виконується задана умова
*(B+i*n+j)=1/double(2 * (i+1) - (j+1) + 3);
}// якщо ні
else{
*(B+i*n+j)=1/double(3 * (i+1) + (j+1) - 2);
}
}
}
return ;
}
void MnojMartixMas(double *A,double *B, double *C,int n){
// множення матриці. Приймає вказіники на початки масивів A,B,C та розмірність
for(int irow = 0; irow < n; irow++)
for(int icol = 0; icol < n; icol++) {
double sum = 0;
for(int k = 0; k < n; k++) {
sum += (*(A+irow*n+k)) * (*(B+k*n+icol));
}
*(C+irow*n+icol) = sum;
}
return ;
}
main ()
{
int n; // розмірність матриці
do{
cout<<"Matrix\n Enter N = ";
cin>>n;
if (n<=0) cout<<"ERROR : N > 0 !\n";
}while (n<=0); // не даємо вийти, поки не буде введено n>0
double *A = new double [n*n]; // створюємо вказівники на масиви
double *B = new double [n*n]; // розмірністю n x n
double *C = new double [n*n]; // дійсний тип
EnterMas(A,n); // заповнюємо масив A розм. n*n з клави
PrintMas(A,n); // друк масив A розм. n*n
FillBMas(B,n); // заповнюємо масив B розм. n*n за умовою
PrintMas(B,n); // друк масив B розм. n*n
MnojMartixMas(A,B,C, n); // множення матриць C=A x B; розмірність n*n
PrintMas(C,n); // друк масив C розм. n*n
delete(A); delete(B); delete(C); // звільняємо пам'ять
system ("PAUSE");
return 0;
}
/* Лаба 4. Варіант 3 Матриці */
#include <iostream>
#include <cstdlib> // тут rand (), srand ()
#include <stdio.h>
#include <conio.h> //
using namespace std; // підключаємо все необхідне для роботи програми
void PrintMas(double *A,int n){// ДрукМатриці. Приймає вказівник на перший
//елемент масиву і кількість елементів
for (int i = 0 ; i < n ; i++){
for (int j = 0 ; j < n ; j++){
cout<<*(A+i*n+j)<<"\t ";
}
cout<<endl;
}
cout<<endl;
return ;
}
void EnterMas(double *A,int n){// Заповнення матриці з клави. Парам.аналог.якв^^
for (int i = 0 ; i < n ; i++){
for (int j = 0 ; j < n ; j++){
cout<<"Enter Matrix ["<<j+1<<"]x["<<i+1<<"] = ";
cin>>*(A+i*n+j);
}
}
return ;
}
void FillBMas(double *B,int n){ // Заповнює матрицю B. Параметри аналогічні ^^
for (int i = 0 ; i < n ; i++){
for (int j = 0 ; j < n ; j++){
if (1<=i && i<=j && j<=n){ // якщо виконується задана умова
*(B+i*n+j)=1/double((i+1)+(j+1)-1);
}// якщо ні
else{
*(B+i*n+j)=1/double((i+1)+(j+1)+1);
}
}
}
return ;
}
void MnojMartixMas(double *A,double *B, double *C,int n){
// множення матриці. Приймає вказіники на початки масивів A,B,C та розмірність
for(int irow = 0; irow < n; irow++)
for(int icol = 0; icol < n; icol++) {
double sum = 0;
for(int k = 0; k < n; k++) {
sum += (*(A+irow*n+k)) * (*(B+k*n+icol));
}
*(C+irow*n+icol) = sum;
}
return ;
}
main ()
{
int n; // розмірність матриці
do{
cout<<"Matrix\n Enter N = ";
cin>>n;
if (n<=0) cout<<"ERROR : N > 0 !\n";
}while (n<=0); // не даємо вийти, поки не буде введено n>0
double *A = new double [n*n]; // створюємо вказівники на масиви
double *B = new double [n*n]; // розмірністю n x n
double *C = new double [n*n]; // дійсний тип
EnterMas(A,n); // заповнюємо масив A розм. n*n з клави
PrintMas(A,n); // друк масив A розм. n*n
FillBMas(B,n); // заповнюємо масив B розм. n*n за умовою
PrintMas(B,n); // друк масив B розм. n*n
MnojMartixMas(A,B,C, n); // множення матриць C=A x B; розмірність n*n
PrintMas(C,n); // друк масив C розм. n*n
delete(a); delete(b); delete(c); // звільняємо пам'ять
system ("PAUSE");
return 0;
}
/*
* Звіт
* Горбаченка Василя Анатолійовича
* Студента 1-го курсу. Радіофізичного факультету. Напрям підготовки: Прикладна фізика.
* Група 3.
* Лабораторна робота №3. Варіант 12.
* Завдання:
*/
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void print_bits (unsigned n)
{ // функція друкує біти, функція з лекії
int bit; // змінна, в якій буде знаходитись поточне значення кількості бітів
for (bit = sizeof(n)*8-1; bit >= 0; bit--)
// початкове значення bit = довжина змінної unsigned
{
if ((n >> bit) & 01)
{ // тут іде логічне множення... складно пояснити, але спробую...
// (n >> bit) - здвигає на "bit" розрядів
// & 01 - логічне множення - тобто, грубо кажучи кусає правіший біт
// тут іде побітове множення(чи просто кажучи побітове "і"), для прикладу:
// 10101110001101
// & побітове "і"
// 00000000000001 тобто тут насправді (01)
// =
// 00000000000001 - цей результат позитивний, тобто більше нуля,
// а значить, грубо кажучи == TRUE
putchar ('1');
}
else
{// іначе 0 - наприклад:
// 011010
// &
// 000001
// =
// 000000 - == FALSE або нулю - негативний
putchar ('0');
}
if (bit % 4 == 0) putchar (' '); // якщо біт, на якому стоїть лічильник кратний чотирьом, то ставимо пробіл
}
cout<<endl; // перевод на нову строчку
}
unsigned inverse_bits (unsigned x,unsigned y,int p,int n)
{
unsigned result=~x; // инверт
unsigned z=0;
//====================================================================================
// Готовим ЗАЧИСТКУ
for (int i = 0 ; i < n ; i++ )
{// заполняем еденичками z в конец
z <<=1;
z = z | 1;
}
for (int i = 0 ; i < p ; i++ )
{// заполняем ноликами z в конец
z <<= 1;
}
// ЗАЧИСТКА готова
// теперь наложим нашу зачистку на x
// x = x | z;
result= ~ ( result | z ); // делаем зачистку "00000" того места, которое мы будем записовать
//====================================================================================
// Готовим ЗАЧИСТКУ
for (int i = 0 ; i < n ; i++ )
{// заполняем еденичками z в конец
z <<=1;
z = z | 1;
}
for (int i = 0 ; i < p ; i++ )
{// заполняем ноликами z в конец
z <<= 1;
}
// ЗАЧИСТКА готова
//====================================================================================
//теперь приготовим те битики, которые нам надо заменить в спец формате со здвигом p
z=0;
for (int i = n-1 ; i >= 0 ; i-- ){
z <<= 1;
z = z | ( (y>>i) & 01 );
}
for (int i = 0 ; i < p ; i++ ){
z <<= 1;
}
//====================================================================================
// теперь самый ответственный момент... Да, тот самый долгожданный ;)))
result = result | z ;
//====================================================================================
// Усё. г.
return result;
}
int main(){
unsigned x, y; // створюємо цілу беззнакову двохбайтову змінну
int n,p;
cout << "Input x" << endl; // підсказка користувачу
cin >> x; // зчитуємо число
print_bits (x); // друкуємо біти
cout << "Input y" << endl; // підсказка користувачу
cin >> y; // зчитуємо число
print_bits (y); // друкуємо біти
do
{
cout << "Input p" << endl; // підсказка користувачу
cin >> p; // зчитуємо число
if (p<=0) {cout<<"ERROR : N>0"<<endl;}
}while (p<=0);
do
{
cout << "Input n" << endl; // підсказка користувачу
cin >> n; // зчитуємо число
if (n<=0) {cout<<"ERROR : N>0"<<endl;}
}while (n<=0);
print_bits (inverse_bits (x,y,p,n)); // друкуємо біти
system ("PAUSE");
return 0;
}
Ксюха Шаптала написав:У кого-то есть методичка с/с++. Залейте плиз
Зараз переглядають цей форум: Немає зареєстрованих користувачів і 5 гостей