Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2012, 19:50   #1
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
Восклицание Сортировка и вывод динамического структурированого массива

Программа должна записывать координаты точек в динамический структурированный массив, потом сортировать по неубыванию координаты Х (икс) и выводить отсортированные элементы массива и номера их начального расположения. Я программу сделал, но она выводит непонятно что - помогите исправить ошибки.

Код:
#include <iostream>
#include <string.h>
using namespace std;
int i,n;
struct point
{
	short number;
	float x_coord, y_coord;
};
point *storage=new point[];
void input()
{
	do
	{
		cout<<"Number of points =";
		cin>>n;
	}
	while (n<3 || n>1000);
	point *storage=new point[n-1];
	cout<<"Write points' coordinates:";
	for (i=0; i<n; i++)
	{
		storage[i].number=i;
		cout<<endl<<i+1<<".\nx=";
		cin>>storage[i].x_coord;
		cout<<"y=";
		cin>>storage[i].y_coord;
	}
}
void sort_x()
{
	short j;
	point temp;
	for (j=0; j<n-1; j++)
		{
			for (i=j+1; i<n; i++)
				if (storage[i].x_coord<storage[i-1].x_coord)
				{
					temp=storage[j];
					storage[j]=storage[i];
					storage[i]=temp;
				}
		}
}
void output()
{
	for (i=0; i<n; i++)
		cout<<"Number="<<storage[i].number<<"\nX coordinate="<<storage[i].x_coord<<endl;
}
void main()
{
	input ();
	output();
	sort_x();
	output();
	system ("pause");
}


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

Модератор.
Вложения
Тип файла: txt paragraph task 6.7(convex shell).txt (948 байт, 120 просмотров)

Последний раз редактировалось Serge_Bliznykov; 11.11.2012 в 21:53.
zorg-kirill вне форума Ответить с цитированием
Старый 11.11.2012, 20:44   #2
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

http://www.cplusplus.com/reference/algorithm/sort/
rUs_LAN вне форума Ответить с цитированием
Старый 11.11.2012, 21:00   #3
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
Восклицание

Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
Сортировка то фигня, дело в том что у меня вывод идет неправильный, что-то не так с функцией output()...
zorg-kirill вне форума Ответить с цитированием
Старый 11.11.2012, 21:20   #4
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Код:
#include "stdafx.h"

using namespace std;
int i,n;
struct point
{
	short number;
	float x_coord, y_coord;
};
point* input()
{
	do
	{
		cout<<"Number of points =";
		cin>>n;
	}
	while (n<3 || n>1000);
	point *storage=new point[n-1];
	cout<<"Write points' coordinates:";
	for (i=0; i<n; i++)
	{
		storage[i].number=i;
		cout<<endl<<i+1<<".\nx=";
		cin>>storage[i].x_coord;
		cout<<"y=";
		cin>>storage[i].y_coord;
	}
	return storage;
}
void sort_x(point *storage)
{
	short j;
	point temp;
	for (j=0; j<n-1; j++)
		{
			for (i=j+1; i<n; i++)
				if (storage[i].x_coord<storage[i-1].x_coord)
				{
					temp=storage[j];
					storage[j]=storage[i];
					storage[i]=temp;
				}
		}
}
void output(point *storage)
{
	for (i=0; i<n; i++)
		cout<<"Number="<<storage[i].number<<"\nX coordinate="<<storage[i].x_coord<<endl;
}
void main()
{
	point* p = input ();
	output(p);
	sort_x(p);
	cout << endl;
	output(p);
	system ("pause");
}

У вас нет понимания про scopes области видимости если на русском помоему или как-то так
rUs_LAN вне форума Ответить с цитированием
Старый 11.11.2012, 21:43   #5
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
По умолчанию

Спасибо!
Еще вопрос но не по теме: как в сообщение вставлять код чтобы выглядело как у вас?
zorg-kirill вне форума Ответить с цитированием
Старый 11.11.2012, 21:45   #6
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

[_CODE] [_/CODE] без _ или кнопочка # там где сообщение
rUs_LAN вне форума Ответить с цитированием
Старый 11.11.2012, 21:47   #7
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Код:
point *storage=new point[n-1];
Странное у вас выделение памяти.
Попробуйте +ануть единицу
Возможно я не понял ваших намерений.
Axrik вне форума Ответить с цитированием
Старый 11.11.2012, 21:49   #8
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
[_CODE] [_/CODE] без _ или кнопочка # там где сообщение
Кстати, zorg-kirill, пользуйтесь этими штуками, ибо неудобно после студии читать обычный серый текст
Axrik вне форума Ответить с цитированием
Старый 11.11.2012, 22:01   #9
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Axrik Посмотреть сообщение
Код:
point *storage=new point[n-1];
Странное у вас выделение памяти.
Попробуйте +ануть единицу
Возможно я не понял ваших намерений.
Ну у меня массив не с 1 элемента начинается а с нулевого, потому и -1 получается (вроде бы меньше памяти будет выделяться и программа будет лучше работать).
p.s. Мне так рассказывали если что.
zorg-kirill вне форума Ответить с цитированием
Старый 11.11.2012, 22:35   #10
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
По умолчанию

Вот еще один способ решить мою проблему:
заменить
Код:
point *storage=new point[];
на
Код:
point *storage;
и заменить
Код:
point *storage=new point[n-1];
на
Код:
storage= new point[n-1]
Код программы будет выглядеть так:
Код:
#include <iostream>
using namespace std;
int i,n;
struct point
{
short number;
float x_coord, y_coord;
};
point *storage;
void input()
{
do
{
cout<<"Number of points =";
cin>>n;
}
while (n<3 || n>1000);
storage=new point[n-1];
cout<<"Write points' coordinates:";
for (i=0; i<n; i++)
{
storage[i].number=i;
cout<<endl<<i+1<<".\nx=";
cin>>storage[i].x_coord;
cout<<"y=";
cin>>storage[i].y_coord;
}
}
void sort_x()
{
short j;
point temp;
for (j=0; j<n-1; j++)
{
for (i=j+1; i<n; i++)
if (storage[i].x_coord<storage[i-1].x_coord)
{
temp=storage[j];
storage[j]=storage[i];
storage[i]=temp;
}
}
}
void output()
{
for (i=0; i<n; i++)
cout<<"Number="<<storage[i].number<<"\nX coordinate="<<storage[i].x_coord<<endl;
}
void main()
{
input ();
sort_x();
output();
system ("pause");
}
zorg-kirill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка динамического массива обьектов(C++) whh Помощь студентам 4 01.11.2012 13:09
Заполнение динамического массива данными из файла и последующий вывод на экран vitalyisaev2 Общие вопросы C/C++ 5 08.09.2010 12:51
вывод динамического массива на экран Arcueid1691 Общие вопросы C/C++ 2 15.10.2009 22:53
сортировка динамического списка new_sergei Помощь студентам 1 19.12.2008 00:36