Консультация № 177930
19.04.2010, 02:16
0.00 руб.
0 10 1
Помогите, пожалуйста, создать программу с объектами, содержащими «структуру» и «объединение», в которых реализовать:
- методы инициализации (конструктор, деструктор);
- методы загрузки и сохранения данных, используя функции работы с файлами;
- функции добавления и изменения данных;
- наглядное отображение имеющихся данных в памяти.
Реализовать Алгоритм выполняющий линейный поиск элемента.
При этом использовать вещественный тип элемента.

Обсуждение

давно
Академик
320937
2216
21.04.2010, 09:17
общий
Шевченко Максим Викторович:
Добрый день!
программа с объектами, содержащими «структуру» и «объединение»

Реализовать Алгоритм выполняющий линейный поиск элемента.

как-то связаны между собой?
Что понимать под линейным поиском? Поиск в неупорядоченном списке?
Как должно выглядеть
наглядное отображение имеющихся данных в памяти.
Неизвестный
21.04.2010, 15:34
общий
Здравствуйте!
Если говорить точнее, то линейный поиск должен выполняться относительно данных, находящихся в struct и union. Это основная задача. Реально?
давно
Академик
320937
2216
21.04.2010, 16:21
общий
Шевченко Максим Викторович:
Я понимаю задачу так: есть список объектов, каждый объект - параллелепипед со сторонами a,b,c. Найти в списке объект со стороной (неважно, длина, ширина, высота), равной 2.5. или как? Тогда приведите пример.
Неизвестный
21.04.2010, 17:30
общий
Окей, ну вот например программа, выполняющая линейный поиск в массиве целых чисел заданного числа x=10 и выводящая результат на экран.

Код:
#include <stdio.h>
int arr[] =
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int i, x;
int size;
void main()
{
size = sizeof(arr)/sizeof(int);
x = 10;


for(i = 0;
i < size && array[i] != x; i++);



if(i == size)
printf("Элемент не найден\n");
else printf("Элемент %d находится в позиции %d\n", x, i);
}


Возможно ли массив заменить на структуру и обьединение (может, как отдельные кодинги) и добавить ввод чисел пользователем, как, например, реализовано ниже

Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define N 5
int main()
{
float arr[N];
float i,x;
int flag=0;
printf("Vvedite massiv iz veshestvennyh chisel\n");
for(i=0;i<N;i++)
scanf("%f",&arr[i]);
printf("Vvedite jelement massiva, indeks kotorogo nuzhno najti\n");
scanf("%f",&x);

for(i=0;i<N;i++)
{
if ( arr[i] == x)
{
flag=1;
break;
}
}
if (flag)
printf("Jetot jelement stoit na %f-m meste\n",i);
else
printf("Takogo jelementa net\n");
getch();
clrscr();
return 0;
}


?

Заранее благодарен.
давно
Академик
320937
2216
21.04.2010, 21:47
общий
Шевченко Максим Викторович:
Это и есть поиск в неупорядоченном массиве. Массив - это набор однородных объектов. /* здесь слово объект употребляется в житейском смысле */, в то время как структура - набор разнородных объектов. Например,
Код:
структура Человек
{
ФИО;
паспорт;
возраст;
};

Что и как Вы собираетесь искать в этой структуре?
В то же время, если задан массив Человеков, можно найти всех в возрасте от 18 до 25 лет. Лучше все-таки Вам уточнить задание.
давно
Академик
320937
2216
22.04.2010, 09:24
общий
Шевченко Максим Викторович:
Посмотрите, пожалуйста. Если направление решения верное - дорабатываю.
Код:
#include <conio.h>
#include <stdio.h>

typedef struct TPoint
{
float x;
float y;
};

int main()
{
enum {N=5};
TPoint arr[N];
int i;
float coord_x;
int flag=0;

printf("Vvedite massiv iz koordinat tochek\n");
for(i=0;i<N;i++)
{
scanf("%f", &(arr[i].x));
scanf("%f", &(arr[i].y));
}

printf("Vvedite jelement massiva, indeks kotorogo nuzhno najti\n");
scanf("%f",&coord_x);

for(i=0;i<N;i++)
{
if ( arr[i].x == coord_x)
{
flag=1;
break;
}
}
if (flag)
printf("Jetot jelement stoit na %d-m meste\n",i);
else
printf("Takogo jelementa net\n");
getch();
return 0;
}

Неизвестный
22.04.2010, 16:44
общий
lamed, думаю, что да, вполне!
То есть с учетом того как в массиве...только поиск будет производиться по каждому полю структуры отдельно? это верно?
А какие еще здесь необходимо доработки, как вы думаете? Речь идет о расширении числа переменных, находящихся в массиве или структуре или же что-то иное?
давно
Академик
320937
2216
22.04.2010, 19:54
общий
Шевченко Максим Викторович:
Создаем массив объектов, каждый объект содержит структуру и объединение, ищем как по полям структуры, так и по полям объединения. Хотя вполне может быть, что Вам надо проводить поиск непосредственно в файле. Из задания это не следует. Программа будет во вторник утром (или в понедельник поздно вечером).
Неизвестный
22.04.2010, 21:25
общий
Окей.
давно
Академик
320937
2216
27.04.2010, 21:02
общий
это ответ
Здравствуйте, Шевченко Максим Викторович. В приложении ответы на часть вопросов. Создан массив объектов материальная точка, включающий структуру {x,y} и объединение {v,w,m}. В зависимости от введенного символа осуществляется поиск по полю структуры или объединения. Программа проверялась недостаточно, возможно будут какие-то вопросы или уточнения. CodeBlocks/G++.


Приложение:
#include <iostream>
#include <stdio.h>

using namespace std;

typedef struct TPoint
{
float x;
float y;
};
typedef union TMech
{
float v;
float w;
float m;
};

class TBody // материальная точка на плоскости
{
private:
TPoint point;
TMech mech;
public:
TBody();
TBody(TPoint& point, TMech& mech)
{
this->point.x = point.x;
this->point.y = point.y;
this->mech.v = mech.v;
this->mech.w = mech.w;
this->mech.m = mech.m;
cout << "(" << point.x <<"," << point.y << ") created" << endl;
}
~TBody()
{
cout << "(" << point.x <<"," << point.y << ") destroyed" << endl;
}
void print();
float get_x() { return point.x; } // читаем координату x
float get_y() { return point.y; }
float get_v() { return mech.v; }
float get_w() { return mech.w; }
float get_m() { return mech.m; }
void set_x(const float x) { this->point.x=x; } // изменяем координату y
void set_y(const float y) { this->point.y=y; }
void set_v(const float v) { this->mech.v=v; }
void set_w(const float w) { this->mech.w=w; }
void set_m(const float m) { this->mech.m=m; }
};

void TBody::print()
{
cout << "точка (" << point.x << "," << point.y << ")";
cout << " скорость=" << mech.v << " ускорение=" << mech.w << " масса=" << mech.m << endl;
}

int find(TBody** ptrb, const int size, const char c, const float val);

int main()
{
const int n = 5; // размер массива
TPoint point; // структура для инициализации
TMech mech; // смесь для инициализации
TBody* b[n]; // массив указателей на объекты
float val; // будем искать
int position; // позиция (или -1, если не найдено)
char search_type; // тип поиска x,y,v,w,m


// создание
for (int i=0; i<n; i++)
{
point.x=i*1.0;
point.y=i*2.0;
mech.v=i*3.0;
mech.w=i*4.0;
mech.m=i*5.0;
b[i] = new TBody(point, mech);
}

// изменение значений
for (int i=0; i<n; i++)
{
b[i]->set_x(i+1);
b[i]->set_m(b[i]->get_m()*1.2); // увеличим массу на 20%
}

// печать
for (int i=0; i<n; i++)
{
(*b[i]).print();
}

// поиск
cout << "значение ";
cin >> val;

cout << "тип поиска : x y v w m";
cin >> search_type;

position = find(b, n, search_type, val);
if (position == -1)
cout << "не найдено" << endl;
else
cout << "позиция в списке " << position << endl;

// удаление
for (int i=0; i<n; i++)
delete b[i];

/*
int i;
float coord_x;
int flag=0;

printf("Vvedite jelement massiva, indeks kotorogo nuzhno najti\n");
scanf("%f",&coord_x);

for(i=0;i<N;i++)
{
if ( arr[i].x == coord_x)
{
flag=1;
break;
}
}
if (flag)
printf("Jetot jelement stoit na %d-m meste\n",i);
else
printf("Takogo jelementa net\n");
getch();
*/
system("pause");
return 0;
}

int find(TBody** ptrb, const int size, const char c, const float val)
{
int position = -1;
// линейный поиск
for (int i=0; i<size; i++)
{
if (
( c=='x' && val==(*(ptrb+i))->get_x())||
( c=='y' && val==(*(ptrb+i))->get_y())||
( c=='v' && val==(*(ptrb+i))->get_v())||
( c=='w' && val==(*(ptrb+i))->get_w())||
( c=='m' && val==(*(ptrb+i))->get_m())
)
{
position = i;
break;
}
}
return position;
}
5
Форма ответа