• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Задача: объединения разных типов с разной байтностью

  • Автор темы kaffein
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

kaffein

всем доброго времени суток!
мне нужно создать объединение, что содержит элементы типов char, int, short, fload, long, string.
создать массив элементов типа объединения и заполнить элементы данного массива случайными значениями за таким условием: элементы массива 0,3,6,9 должны содержать элементы первого типа, 1,4,7,10 другого, 2,5,8,11 третьего и вычислить суму элементов каждого типа.
заранее спасибо
пробивал писать код, но в голову ничего не лезет :rolleyes:
 
K

kaffein

всем доброго времени суток!
мне нужно создать объединение, что содержит элементы типов char, int, short, fload, long, string.
создать массив элементов типа объединения и заполнить элементы данного массива случайными значениями за таким условием: элементы массива 0,3,6,9 должны содержать элементы первого типа, 1,4,7,10 другого, 2,5,8,11 третьего и вычислить суму элементов каждого типа.
заранее спасибо
пробивал писать код, но в голову ничего не лезет :rolleyes:

union aaa
{
char a;
int b;
short c;
float d;
long s;
char v[23];
};



srand(time(NULL));
aaa de[50];
for(i=0;i<50;i+=3);
de= rand()%200;
for(j=1;j<50;j+=3);
de[j]= rand()%200;
for(k=2;k<50;k+=3);
de[k]=rand()%200;

вот чтото пробывал, но сам понимаю код маленько подибильному вышел ;)
 
D

DarkKnight

Вот держи..
C++:
/*
Cоздать объединение, что содержит элементы типов char, int, short, fload, long, string.
создать массив элементов типа объединения и заполнить элементы данного массива случайными значениями 
за таким условием: элементы массива 0,3,6,9 должны содержать элементы первого типа, 1,4,7,10 другого, 2,5,8,11 третьего и вычислить суму элементов каждого типа.
*/

/*
codeby.net
Autor: DarkKnight125
*/
#include <iostream>
#include <time.h>

using namespace std;

//Наше объединение
union Un
{
char		uchar;
int			uint;
short		ushort;
float		ufloat;
long		ulong;
char		ustring[12];	

};

void main(void)
{
setlocale(LC_ALL,".1251"); //Установим локаль
Un Arr[12]; //Наш массив
srand(time(NULL)); //Инициализируем генератор случ. величины

//Обнулим память выделенную под массив
for (int i = 0; i<12; i++)
{
memset(&Arr[i],0,sizeof(Un));
}

for (int i = 0; i<12; i+=3)
{
//элементы массива 0,3,6,9 должны содержать элементы первого типа
Arr[i].uchar = (char)rand()%256; //заполним char
//1,4,7,10 другого (второго)
Arr[i+1].uint = (int) rand(); //Заполним Int
//2,5,8,11 третьего
Arr[i+2].ushort = (short) rand();
}

long  SumChar = 0; //Сумма для char
long  SumInt = 0; //Сумма для int
long  SumShort = 0; //Сумма для short
float SumFloat = 0.0; //Сумма для float
long  SumLong = 0; //Сумма для long
char  SumString[120] = {0}; //Строка (ее мы кстати будем объединять)

for (int i =0; i<12; i++) //Обойдем весь массив
{
//Ну и суммируем все это дело
SumChar += Arr[i].uchar;
SumInt  += Arr[i].uint;
SumShort += Arr[i].ushort;
SumFloat += Arr[i].ufloat;
SumLong += Arr[i].ulong;
strcat(SumString,Arr[i].ustring);
}
cout<<"Результат : " << endl;
cout<<"Сумма [char] : "<< SumChar << endl;
cout<<"Сумма [int] : "<< SumInt << endl;
cout<<"Сумма [short] : "<< SumShort << endl;
cout<<"Сумма [float] : "<< SumFloat << endl;
cout<<"Сумма [long] : "<< SumLong << endl;
cout<<"Сумма [char*] : "<< SumString << endl;

}
 

Вложения

  • union.jpg
    union.jpg
    20,1 КБ · Просмотры: 424
K

kaffein

Вот держи..
C++:
/*
Cоздать объединение, что содержит элементы типов char, int, short, fload, long, string.
создать массив элементов типа объединения и заполнить элементы данного массива случайными значениями 
за таким условием: элементы массива 0,3,6,9 должны содержать элементы первого типа, 1,4,7,10 другого, 2,5,8,11 третьего и вычислить суму элементов каждого типа.
*/

/*
codeby.net
Autor: DarkKnight125
*/
#include <iostream>
#include <time.h>

using namespace std;

//Наше объединение
union Un
{
char		uchar;
int			uint;
short		ushort;
float		ufloat;
long		ulong;
char		ustring[12];	

};

void main(void)
{
setlocale(LC_ALL,".1251"); //Установим локаль
Un Arr[12]; //Наш массив
srand(time(NULL)); //Инициализируем генератор случ. величины

//Обнулим память выделенную под массив
for (int i = 0; i<12; i++)
{
memset(&Arr[i],0,sizeof(Un));
}

for (int i = 0; i<12; i+=3)
{
//элементы массива 0,3,6,9 должны содержать элементы первого типа
Arr[i].uchar = (char)rand()%256; //заполним char
//1,4,7,10 другого (второго)
Arr[i+1].uint = (int) rand(); //Заполним Int
//2,5,8,11 третьего
Arr[i+2].ushort = (short) rand();
}

long  SumChar = 0; //Сумма для char
long  SumInt = 0; //Сумма для int
long  SumShort = 0; //Сумма для short
float SumFloat = 0.0; //Сумма для float
long  SumLong = 0; //Сумма для long
char  SumString[120] = {0}; //Строка (ее мы кстати будем объединять)

for (int i =0; i<12; i++) //Обойдем весь массив
{
//Ну и суммируем все это дело
SumChar += Arr[i].uchar;
SumInt  += Arr[i].uint;
SumShort += Arr[i].ushort;
SumFloat += Arr[i].ufloat;
SumLong += Arr[i].ulong;
strcat(SumString,Arr[i].ustring);
}
cout<<"Результат : " << endl;
cout<<"Сумма [char] : "<< SumChar << endl;
cout<<"Сумма [int] : "<< SumInt << endl;
cout<<"Сумма [short] : "<< SumShort << endl;
cout<<"Сумма [float] : "<< SumFloat << endl;
cout<<"Сумма [long] : "<< SumLong << endl;
cout<<"Сумма [char*] : "<< SumString << endl;

}



Спасибо большое :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!