85783

Работа с двоичными файлами в ОС Windows на языке С++

Лабораторная работа

Информатика, кибернетика и программирование

Цель работы: изучение методов работы с двоичными файлами и битовой информацией в ОС Windows на языке С++ При записи информации в двоичный файл символы и числа преобразуются в последовательность из байтов. Для того чтобы записать данные в двоичный файл, необходимо: описать файловую переменную...

Русский

2015-03-30

67.89 KB

1 чел.

Лабораторная работа 2. Работа с двоичными файлами в ОС Windows на языке С++

Цель работы: изучение методов работы с двоичными файлами и битовой информацией в ОС Windows на языке С++

При записи информации в двоичный файл символы и числа преобразуются в последовательность из байтов.

Для того чтобы записать данные в двоичный файл, необходимо:

  1.  описать файловую переменную типа FAIL * с помощью оператора FILE *filename;. Здесь filename — имя переменной, где будет храниться указатель на файл.
  2.  открыть файл с помощью функции fopen
  3.  записать информацию в файл с помощью функции fwrite
  4.  закрыть файл с помощью функции fclose

Для того чтобы считать данные из двоичного файла, необходимо:

  1.  описать переменную типа FILE *
  2.  открыть файл с помощью функции fopen
  3.  считать необходимую информацию из файла с помощью функции fread, при этом следить за тем достигнут ли конец файла.
  4.  закрыть файл с помощью функции fclose

Рассмотрим основные функции, необходимые для работы с двоичными файлами.

Для открытия файла в зависимости от используемых библиотек используются функции fopen или fopen_s . В них последним параметром является mode - строка, определяющая режим работы с файлом; возможны следующие ее значения:

  1.  «rb» — открываем двоичный файл в режиме чтения;
  2.  «wb» — создаем двоичный файл для записи; если он существует, то его содержимое очищается;
  3.  «ab» — создаем или открываем двоичный файл для дозаписи в конец файла;
  4.  «rb+» — открываем существующий двоичный файл в режиме чтения и записи;
  5.  «wb+» — открываем двоичный файл в режиме чтения и записи, существующий файл очищается;
  6.  «ab+» — двоичный файл открывается или создается для исправления существующий информации и добавления новой в конец файла.

Для закрытия файла предназначена функция fclose

int fclose(FILE *filename);

Возвращает 0 при успешном закрытие файла и NULL в противном случае. Функция remove предназначена для удаления файлов.

int remove(const char *filename);

Эта функция удаляет с диска файл с именем filenаmе. Удаляемый файл должен быть закрыт. Функция возвращает ненулевое значение, если файл не удалось удалить.

Для переименования файлов предназначена функция rename:

int rename(const char *oldfilename, const char *newfilename);

Первый параметр — старое имя файла, второй — новое. Возвращает 0 при удачном завершении программы.

Чтение из двоичного файла осуществляется с помощью функции fread:

fread(void *ptr, size, n, FILE *filename);

Функция fread считывает из файла filename в массив ptr n элементов размера size. Функция возвращает количество считанных элементов. После чтения из файла его указатель смещается на n*size байт.

Запись в двоичный файл осуществляется с помощью функции fwrite:

fwrite(const void *ptr, size, n, FILE *filename);

Функция fwrite записывает в файл filename из массива ptr n элементов размера size. Функция возвращает количество записанных элементов. После записи информации в файл указатель смещается на n*size байт.

Для контроля достижения конца файла есть функция feof:

int feof(FILE *filename);

Она возвращает ненулевое значение если достигнут конец файла.

Для просмотра содержимого двоичных (бинарных) файлов необходимы специальные программы. Обычно они представляют двоичную байтовую информацию в шестнадцатеричной системе счисления. В ней каждый байт, состоящий из 8 бит, разбивается на две тетрады (части по 4 бита), которые заменяются одной шестнадцатеричной цифрой по правилу:

  1.  00002 -  016;   8)   10002 -  816;
    1.  00012 -  116;   9)   10012 -  916;
    2.  00102 -  216;    10) 10102 -  A16;
    3.  00112 -  316;    11) 10112 -  B16;
    4.  01002 -  416;    12) 11002 -  C16;
    5.  01012 -  516;    13) 11012 -  D16;
    6.  01102 -  616;    14) 11102 -  E16;
    7.  01112 -  716;    15) 11112 -  F16.

Для записи целых шестнадцатеричных чисел в отдельные байты в языке С++ используется шестнадцатеричная форма записи, начинающаяся с Ох. Например, после присваиваний:

char s1,s2

s1=OxAB;   

s2=Ox2F;

в байтах  s1 и s2 будут содержаться шестнадцатеричные числа AB16 и 2F16, которые соответствуют двоичным словам  101010112 и 001011112.

Шестнадцатеричная система счисления позволяет непосредственно записывать двоичные числа в байты. Например, если в байт s1 необходимо записать последовательность значений 8 бит, равную 101011002, то сначала эта последовательность разбивается на две тетрады (10102  и 11002), они переводятся в соответствующие шестнадцатеричные числа (А16 и C16), а затем выполняется присваивание:

s1=OxAC;

Для считывания отдельных байтов (в переменную типа char) с игнорированием пробелов можно использовать создание потока и обычны й потоковый вывод.

Пример 1. Написать функцию prf(string f) для вывода на экран содержимого каждого байта файла с именем f в виде символа, шестнадцатеричного числа и двоичного числа. Между выводимыми числами поставить знак “=” (равенство). Для примера вывести на экран содержимое бинарного  файла C:\\TEXT\\d.dat.

Решение:

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <iomanip>

#include <stdlib.h>

#include <string>

using namespace std;

void prf(string f);

void main(){

string p;

p="C:\\TEXT\\d.dat";

prf(p);

}

void prf(string f) {

setlocale (LC_ALL, "RUS");

unsigned int n, i,j,b,b2,st,fc,sc;

unsigned char G[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

unsigned int *d = new unsigned int [8];

unsigned char *a;

char ch, F, S;

fstream pf;

pf.open(f);//открываем файл в режиме чтения

a=new unsigned char[1000]; //выделение памяти для буферного массива а

i=0;

while (!pf.eof()){ //запись содержимого файла в буферный массив а

pf>>ch;

a[i]=(unsigned int )ch;

i+=1; //чтение очередного байта из файла в массив a

};

n=i-1;

for (i=0; i<n; i++) {

cout<<a[i]<<"=";//вывод символа a[i] на экран

b=(int)a[i]; //перевод символа в целочисленное представление

fc=b/16; sc=b-fc*16; F = G[fc]; S = G[sc];//перевод символа в 16-ричный вид

cout<<F<<S<<"=";//вывод 16-ричной кодировки символа a[i] на экран

for (j=0; j<8; j++) { b2=b/2; d[j]= b-2*b2; b=b2; };//перевод символа в двоичный вид

cout<<d[7]<<d[6]<<d[5]<<d[4]<<d[3]<<d[2]<<d[1]<<d[0];//вывод 2-чной кодировки символа a[i] на экран

cout<<endl; // переход на новую строку

};

pf.close(); //закрываем файл

system("pause");

}

Задания:

1. Модифицировать текст программы таким образом, чтобы на экран каждое новое значение выводилось бы в системе счисления с основанием 4.

2. Модифицировать текст программы таким образом, чтобы на экран каждое новое значение выводилось бы в одной строке в системе счисления с основанием 16 через два пробела.

         Для считывания всех подряд байтов (в том числе - пустых) можно использовать функцию fscanf_s. 

Пример 2. Написать функцию prfp(char * name)для вывода на экран содержимого каждого байта файла с заданным именем в виде символа, шестнадцатеричного числа и двоичного числа. Между выводимыми числами поставить знак “=” (равенство). Для примера вывести на экран содержимое бинарного  файла C:\\TEXT\\d.dat.

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <iomanip>

#include <stdlib.h>

#include <string>

using namespace std;

void prfp(char * name);

void main(){

char * fileName = "C:\\TEXT\\d.dat";

prf(fileName);

}

void prfp(char * name) {

setlocale (LC_ALL, "RUS");

int n, i,j,b,b2,fc,sc;

unsigned char G[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

unsigned int *d = new unsigned int [8];

unsigned char a;

unsigned char F, S;

FILE *f;

char c;

char *mc;

mc = new char[1000];

int err=fopen_s(&f, name, "r");

if(err){return;};

cout<<"FILE = ";

i=-1;

while(fscanf_s(f,"%c",&c,1)==1) {

i=i+1;  printf("%c",c);  mc[i]=c;

};

n=i+1;

cout<<endl;

for (i=0; i<n; i++) {

cout<<mc[i]<<"=";//вывод символа a[i] на экран

a = (unsigned char)mc[i];

b=(int)a; //перевод символа в целочисленное представление

fc=b/16; sc=b-fc*16;

//cout<<"fc="<<fc<<"sc="<<sc;

F = G[fc]; S = G[sc];//перевод символа в 16-ричный вид

cout<<F<<S<<"=";//вывод 16-ричной кодировки символа a[i] на экран

for (j=0; j<8; j++) { b2=b/2; d[j]= b-2*b2; b=b2; };//перевод символа в двоичный вид

cout<<d[7]<<d[6]<<d[5]<<d[4]<<d[3]<<d[2]<<d[1]<<d[0];//вывод 2-чной кодировки символа a[i] на экран

cout<<endl; // переход на новую строку

};

fclose(f);

system("pause");

}

Рассмотрим примеры записи и чтения содержимого двоичных файлов.

Пример 3. Создать двоичный файл D:\\str.dat, записать в него вводимое с клавиатуры целое число n , а затем -  n вводимых с клавиатуры вещественных чисел.

Решение:

#include "stdafx.h"

#include <iostream>

using namespace std;

void main() {

   setlocale (LC_ALL, "RUS");

   int n, i;

   double a;

   FILE *f; //описываем файловую переменную

   fopen_s(&f,"D:\\str.dat", "wb");//создаем двоичный файл в режиме записи

   cout<<"n="; cin>>n; //ввод числа n

   fwrite(&n, sizeof(int), 1, f); // запись целого числа n в файл

   for (i=0; i<n; i++) { //цикл для ввода c клавиатуры в файл n вещественных чисел

     cout<<"a=";//вывод на экран запроса на ввод очередного веществен. числа

     cin>>a; //ввод очередного вещественного числа с клавиатуры

     fwrite(&a, sizeof(double), 1, f); //запись вещественного числа в двоичный файл

   }

fclose(f); //закрываем файл

system("pause");

}

Задания:

1. Модифицировать текст программы таким образом, чтобы в файл записывались не вещественные, а целочисленные значения.

2. Модифицировать текст программы таким образом, чтобы в файл  после каждого вещественного числа записывалось целочисленное значение, равное вещественному с отброшенной дробной частью.

3. Модифицировать текст программы таким образом, чтобы в заданный двоичный файл записывались 5 вводимых с экрана логических значений (0 – false, 1 - true).

Пример 4. Вывести на экран содержимое созданного в прошлой задаче двоичного файла D:\\str.dat в виде вещественных чисел.

Решение:

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

  setlocale (LC_ALL, "RUS");

  int n, i;

  double *a;

  FILE *f; //описание файловой переменной

  fopen_s(&f,"D:\\str.dat", "rb");//открытие двоичного файла в режиме чтения

  fread(&n, sizeof(int), 1, f); //чтение из файла 1-го целого числа в переменную n

  cout<<"n="<<n<<endl; //вывод числа n на экран

  a=new double[n]; //выделение памяти для массива а из n вещественных чисел

  fread(a, sizeof(double), n, f); //чтение n веществен. чисел из файла в массив a

  for (i=0; i<n; i++) cout<<a[i]<<"\t";//вывод массива а на экран

  cout<<endl; // переход на новую строку

  fclose(f); //закрываем файл

  system("pause");

  return 0;

}

Задания:

1. Модифицировать текст программы таким образом, чтобы при выводе на экран, каждое новое значение записывалось с новой строки.

2. Модифицировать текст программы таким образом, чтобы вещественные числа выводились на экран трижды подряд.

Двоичный файл — последовательная структура данных, после открытия файла доступен первый байт, хранящийся в нем. Можно последовательно записывать или считывать данные из файла.

В случае объемных файлов удобнее использовать функцию fseek перемещения указателя файла к заданному байту.

int fseek(FILE *filename, long int offset, int origin);

Функция устанавливает указатель текущий позиции файла F в соответствии со значением начала отсчета origin и смещения offset. Параметр offset равен количеству байтов, на которые будет смещен указатель файла относительно начала отсчета, заданного параметром origin. В качестве значения для параметра origin должно быть взято одно из следующих значений отсчета смещения offset, определенных в заголовке stdio.h:

  1.  SEEK_SET — с начала файла;
  2.  SEEK_CUR — с текущей позиции;
  3.  SEEK_END — с конца файла.

Функция возвращает нулевое значение при успешном выполнение операции, ненулевое — при возникновении сбоя при выполнении смещения

Функция fseek фактически реализует прямой доступ к любому значению в файле. Необходимо только знать месторасположение (номер байта) значения в файле.

Пример 5. Выдать вещественное число с номером 15 из двоичного файла "D:\\num.dat", содержащего вещественные числа, на экран двумя  способами: 1) c помощью последовательного доступа (вариант 1); 2) при помощи указателя fseek (вариант 2)..

Решение.

#include "stdafx.h"

#include <iostream>

using namespace std;

void main() { setlocale (LC_ALL, "RUS");

  int n, i;

  double a;

  FILE *f;

  fopen_s(&f,"D:\\num.dat", "rb");

  for (i=0; i<14; i++)

  fread(&a, sizeof(double), 1, f);

  cout<<"Var1 a="<<a<<"\n";

  fseek(f,14*sizeof(double),SEEK_SET);

  fread(&a,sizeof(double),1,f);

  cout<<"Var2 a="<<a<<"\n";

  fclose(f);

  system("pause");

}

Задания:

1. Модифицировать текст программы для аналогичного считывания из файла, содержащего целые числа типа int.

2. Модифицировать текст программы таким образом, чтобы на экран трижды было выведено последнее число файла, а затем дважды – предпоследнее.

Пример 6. В созданном ранее двоичном файле D:\\str.dat поменять местами наибольшее и наименьшее из вещественных чисел.

Решение. Алгоритм решения задачи состоит из следующих этапов:

  1.  чтение вещественных чисел из файла в массив a.
  2.  поиск в массиве а максимального (max) и минимального (min) значения и их номеров (imax, imin).
  3.  перемещения указателя файла к максимальному значению и запись min.
  4.  перемещения указателя файла к минимальному значению и запись max.

Текст программы решения задачи с комментариями.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main()

{

setlocale (LC_ALL, "RUS");

int n, i, imax, imin;

double *a, max, min;

FILE *f;

//открытие файла в режиме чтения и записи

fopen_s(&f,"D:\\str.dat", "rb+");

//считываем из файла в переменную n количество

//вещественных чисел в файле

fread(&n, sizeof(int), 1, f);

cout<<"n="<<n<<endl;

a=new double[n]; //выделение памяти для хранения вещ. чисел в массиве a

fread(a, sizeof(double), n, f); //считывание из файла в массив а вещ. чисел

//поиск максимального и минимального элементов и их индексов в массиве а

for (imax=imin=0, max=min=a[0], i=1; i<n; i++){

if (a[i]>max){max=a[i];imax=i;}

if (a[i]<min){min=a[i];imin=i;}

}

//перемещение указателя к максимальному элементу

fseek(f, sizeof(int)+imax*sizeof(double), SEEK_SET);

//запись min вместо максимального элемента файла

fwrite(&min, sizeof(double), 1, f);

//перемещение указателя к минимальному элементу

fseek(f, sizeof(int)+imin*sizeof(double), SEEK_SET);

//запись max вместо минимального элемента файла

fwrite(&max, sizeof(double), 1, f);

fclose(f); //закрытие файла

cout<<"Максимальный элемент = "<<max<<"\n";

cout<<"Минимальный элемент = "<<min<<"\n";

delete []a; //освобождение памяти

system("pause");

return 0;

}

Задания:

1. Модифицировать текст программы таким образом, чтобы на экран дополнительно выводились номера максимального и минимального значения.

2. Модифицировать текст программы таким образом, чтобы максимальный элемент менялся бы местами с начальным элементом файла, а минимальный – с последним.

Байтовые величины, содержащие по 8 бит, имеют тип char. Зачастую требуется определить либо изменить отдельные биты внутри байта. Для этого необходимо использовать двоичную запись целого числа типа int, соответствующего байту.

Переход от символьной кодировки к коду целого числа типа int  осуществляется путем изменения их типа. Затем для перехода  к двоичному представлению полученное число необходимо разложить по степеням числа 2.

Пример 7. Для байта ch, который находится на 8 месте в файле  D:\\fсhar.dat с символьной информацией, найти двоичные разряды в его двоичном представлении, занести их в массив d[8] и выдать на экран. Для поиска байта использовать указатель  fseek.

Решение.. 

#include "stdafx.h"

#include <iostream>

using namespace std;

void main() { setlocale (LC_ALL, "RUS");

   int  n,  i, ost, r;

   char a;

   FILE *f;

   fopen_s(&f,"D:\\num.dat", "rb");

   fseek(f,7*sizeof(char),SEEK_SET);

   fread(&a,sizeof(char),1,f);

   cout<<"char  a="<<a<<"\n";

   n = (int) a;

   cout<<" int n="<<n<<"\n";

   int d = new int [8];

   for (i=0,  i<8; i++) { d[7-i]= (n mod 2);  n=n/2; cout<<" d["<<7-i<<"]=”<<d[7-i]<<”\n";};

   fclose(f);

   system("pause");

}

Пример 8. Логический  массив  int d[8] содержит логические значения false (0) и true (1). Значения элементов массива инициализируются в программе. Требуется сформировать в файле  D:\\fсhar.dat байт ch с номером 5, который в своих разрядах содержит данные логические значения. Например, для массива d[8] = {1,0,1,1,0,0,1,0} должен быть сформирован байт ch с содержимым 101100102. Все предыдущие байты заполнить нулевыми значениями.

Решение.. 

#include "stdafx.h"

#include <iostream>

using namespace std;

void main() { setlocale (LC_ALL, "RUS");

   int  n,  i, st, b;

   int d=new int[8];

   d = {1,0,1,0,1,0,1,0};

   char  ch;

   FILE *f;

   fopen_s(&f," D:\\fсhar.dat ", "wb");

   for (i=0,  i<5; i++) {// запись нулевых значений в файл

         fwrite(0, 1, 1, f);

   }

   st=1; b=0;

  for (i=0,  i<8; i++) {// формирование 5-го байта файла 

   b+=d[7-i]*st; st*=2;

  };

  Ch = (char) b;

  fwrite(ch, 1, 1, f); // запись 5-го байта в файл

  fclose(f);

  system("pause");

}

Задания для самостоятельного выполнения.

  1.  Для заданного двоичного файла записать два новых файла. Первый содержит нечётные байты исходного, второй – чётные. Вывести содержимое исходного и итоговых файлов  на экран.
  2.  Записать двоичный файл, у которого  каждый байт задает двоичный код чисел от 0 до 255. По нему создать новый двоичный файл, у которого байты упорядочены по возрастанию числа 1 в записи числа. Вывести содержимое исходного и итогового файлов  на экран.
  3.  По заданному двоичному файлу с произвольным числом и содержанием байтов создать два новых  двоичных  файла. В первом файле каждый байт исходного умножен на 4 по модулю 255. Во втором файле каждый байт исходного умножен на 5 по модулю 255. Вывести содержимое исходного и итоговых файлов  на экран.
  4.  Ввести с клавиатуры по запросу содержимое двоичного файла, у которого  байты задают  в двоичной системе числа от 0 до 12. По нему создать новый двоичный  файл, у которого во всех байтах обнулены 3 младших разряда. Вывести содержимое исходного и итогового файлов  на экран.
  5.   Ввести с клавиатуры в  двоичный файл заданное число байтов. Создать новый двоичный файл удвоенной длины,  в котором  каждый байт  исходного входит дважды подряд. Вывести содержимое исходного и итогового файлов  на экран.
  6.  Ввести в байты массива сh размерности 15 циклически повторяющиеся двоичные слова вида 000001112, 000011102, 000111002, 001110002, 011100002, 111000002. Сохранить массив ch в исходном файле. Перевести двоичные числа в десятичный вид, прибавить к ним их номер в массиве, преобразовать опять к двоичному виду и записать в новый файл. Вывести содержимое исходного и итогового файлов  на экран.
  7.  По заданному двоичному файлу с произвольным содержанием  создать новый  двоичный  файл, у которого байты переставлены в обратном порядке. Вывести содержимое исходного и итогового файлов  на экран.
  8.   По заданному двоичному файлу с произвольным числом и содержанием байтов создать новый  двоичный  файл, который обнулены 2 старших бита во всех байтах. Вывести содержимое исходного и итогового файлов  на экран.
  9.  По заданному двоичному файлу с произвольным содержанием  создать новый  двоичный  файл, у которого содержимое пяти младших разрядов каждого байта инвертировано в двоичной системе  счисления. Вывести содержимое исходного и итогового файлов  на экран в двоичной системе счисления.
  10.  По заданному двоичному файлу с произвольным содержанием  создать новый  двоичный  файл, у которого во всех байтах в 2 старших разрядах вставлены значения 1. Вывести содержимое исходного и итогового файлов  на экран.
  11.  По двум заданным двоичным файлам создать новый двоичный файл, в котором на нечетных местах (1,3,5,…) стоят байты из первого файла, а на четных местах (2,4,6,…) – байты из второго файла. Вывести содержимое исходных и итогового файлов  на экран.
  12.  Ввести в байты массива сh размерности 20 циклически повторяющиеся двоичные слова вида 010110102, 110011112, 111010012, 110000112. Записать массив в исходный двоичный файл. Инвертировать содержимое всех байтов и записать их в новый двоичный файл. Вывести содержимое исходного и итогового файлов  на экран.
  13.  По заданному двоичному файлу с произвольным содержанием  создать новый  двоичный  файл, у которого содержимое трех старших разрядов каждого байта инвертировано в двоичной системе  счисления. Вывести содержимое исходного и итогового файлов  на экран в двоичной системе счисления.

 

А также другие работы, которые могут Вас заинтересовать

83564. Міжнародна співпраця в боротьбі із злочинністю 36.13 KB
  Важливою формою міжнародної співпраці в боротьбі із злочинністю є надання правової допомоги в кримінальних справах. Правовою основою такої співпраці є багатосторонні конвенції наприклад Європейська Конвенція про взаємну правову допомогу в кримінальних справах 1959 р. і двосторонні міжнародні договори наприклад Договір між Україною та Сполученими...
83565. Поняття, цілі та принципи права міжнародної безпеки 36.29 KB
  Право міжнародної безпеки галузь міжнародного права принципи і норми якої регулюють взаємодію суб\'єктів в цілях забезпечення миру і безпеки. Безпека кожної держави залежить від безпеки всіх тому скорочення озброєння до рівня необхідного для самооборони і участі в колективних миротворчих діях стало вимогою часу. Сучасна система безпеки охоплює не тільки військові та політичні але також і інші аспекти економічні екологічні гуманітарні і зрозуміло правові.
83566. Загальна колективна безпека. Право на самооборону та гуманітарна інтервенція 37.54 KB
  Колективна безпека – це система спільних дій держав та або міжнародних організацій з метою підтримання міжнародного миру та безпеки попередження або припинення за допомогою адекватних та легітимних засобів актів агресії. Залежно від рівня створення систем колективної безпеки розрізняють два їх види – загальну універсальну та регіональні системи колективної безпеки. Основи загальної колективної безпеки заклав Статут ООН. Характерною рисою системи безпеки ООН перш за все є попередження загрози миру шляхом створення і підтримки усесторонньої...
83567. Регіональні міжнародні організації у системі колективної безпеки. Організація з безпеки і співробітництва в Європі, Організація Північноатлантичного договору 37.3 KB
  Організація з безпеки і співробітництва в Європі Організація Північноатлантичного договору Статут ООН містить спеціальний розділ VIII про регіональні угоди і органи для вирішення питань що відносяться до підтримки миру і безпеки на регіональному рівні. Рада Безпеки заохочує мирне вирішення суперечок в рамках таких угод і органів. Без повноважень Ради Безпеки вони не можуть вчиняти примусові дії за винятком тих що здійснюються в порядку колективної самооборони.
83568. Заходи зміцнення довіри. Міжнародний контроль 36.51 KB
  Заходи зміцнення довіри порівняно новий елемент системи міжнародної безпеки. Першими міжнародноправовими актами з даного питання можна вважати Угоди між СРСР і США про заходи щодо зменшення небезпеки виникнення ядерної війни 1971 р. Саме поняття заходи зміцнення довіри було введено в обіг Заключним актом НБСЄ 1975 р. Заходи довіри розроблялися і Генеральною Асамблеєю ООН.
83569. Роззброєння. Договір ПРО 39.94 KB
  Вона припускає розпуск збройних сил ліквідацію військових споруд і озброєнь; знищення і припинення виробництва зброї масового знищення а також засобів її доставки; скасування органів військового керівництва і припинення військового навчання; припинення витрачання коштів на військові цілі. І Особливе значення має запобігання вживанню ядерної зброї і інших видів зброї масового враження хімічної бактеріологічної радіологічної екологічної. Генеральна Асамблея ООН прийняла ряд резолюцій що забороняють застосування ядерної зброї. був...
83570. Поняття та джерела права збройних конфліктів 38.01 KB
  Право збройних конфліктів являє собою самостійну галузь міжнародного права принципи і норми якої регулюють допустимість засобів і методів ведення війни забезпечують захист жертв збройних конфліктів встановлюють взаємостосунки між воюючими і невоюючими державами. Ми можемо знайти правила ведення війни у правових памятниках старовини та у практиці держав. Так ще Закони Ману містили норми про заборону деяких засобів ведення війни зокрема отруйних стріл. Або загальновідоме Іду на Ви князя Святослава як звичай оголошення війни.
83571. Поняття та види збройних конфліктів 36.34 KB
  Розрізняють міжнародні збройні конфлікти і збройні конфлікти неміжнародного характеру. міжнародними збройними конфліктами визнаються такі конфлікти коли один суб’єкт міжнародного права застосовує збройну силу проти іншого суб’єкта. міжнародними є також збройні конфлікти в яких народи ведуть боротьбу проти колоніального панування і іноземної окупації та проти расистських режимів в здійснення свого права на самовизначення. Збройні конфлікти неміжнародного характеру це збройні конфлікти що не підпадають під дію ст.
83572. Початок війни і його правові наслідки. Цілі війни. Театр війни 37.66 KB
  Цілі війни. Театр війни Відповідно до Гаазької конвенції про відкриття військових дій 1907 р. держави визнають що військові дії між ними не повинні починатися без попереднього і недвозначного попередженняяке матиме або форму мотивованого оголошення війни або форму ультиматуму з умовним оголошенням війни.