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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2009, 19:37   #1
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию присвоение номера С++

помогите, пожалуйста, присвоить номер каждому элементу последовательности так, чтобы при последующими изменениями чисел последовательности и их сортировке этот номер не менялся(
Annabel вне форума Ответить с цитированием
Старый 14.11.2009, 20:01   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Если я правильно понял задание,то можно сделать так(даю примерный код,чтобы показать механику).Допустим есть последовательность чисел 1 2 3 4 5 6 7 8.Логично их забить в массив,но если отсортируем этот массив по убыванию,то первый элемент массива будет 8,дальше 7 и т.д.Но нам надо знать начальное положение в массиве элемента 8 до сортировки.Предлагаю такое решение:
Код:
#include "iostream"
using namespace std;

struct m
{
   int Value;
   int Number;
};
m massiv [8];//объявили массив структур
int main()
{
  for(int i=0;i<8;i++)
    {
       massiv[i].Value=i+1;
       massiv[i].Number=i;
     };
//Теперь мы забили начальные значения и начальный номер.Можно переставить элементы массива местами,но при этом не менять поле Number и мы всегда будем знать где что было.Поменяем первый и последний элемент местами,домножив последний элемент на 2.
m temp;
massiv[7].Value*=2;
temp=massiv[7];
massiv[7]=massiv[1];
massiv[1]=temp;
//поле Number не изменилось
}
Надеюсь,что я ответил на вопрос.)
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 14.11.2009, 20:25   #3
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию

Спасибо огромное) только у меня не получается эту последовательность номеров потом на экран вывести после сортировки=\
Annabel вне форума Ответить с цитированием
Старый 14.11.2009, 20:31   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Почему?что пишет?..выводим просто перебирая индексы массива от 0 до i,обращаясь к полю Number.Выглядит так(для примера выше):
Код:
for(int i=0;i<8;i++)
    {
       cout<<"Nomer v massive seychas "<<i<<" ,a bul v nachale takim "<<massiv[i].Number<<'\n';
     };
Как-то так...)) Это необходимо было?))
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 14.11.2009, 20:34   #5
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию

аааа, а я пыталась тупо сам массив=\ прошу прощения, с азов учусь( спасибо огромное за помощь
Annabel вне форума Ответить с цитированием
Старый 14.11.2009, 20:40   #6
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Обращение к значению этого массив(это не обычный массив,а массив структур) идет по принципу имя_массива[номер_элемента_в_массиве].имя_поля_в_структуре.
Если все поняли,то щелкайте по весам под моей авой и одобряйте))),мне будет приятно)))
Да,забыл сказать,что присвоение одинаковых структур можно делать не перебирая каждое поле,а так,как делал я:
Код:
m temp;
temp=massiv[7];//скопировали все поля из одного в другой без изменений
massiv[7]=massiv[1];
massiv[1]=temp;
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 14.11.2009 в 20:44.
Скарам вне форума Ответить с цитированием
Старый 15.11.2009, 15:23   #7
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию =\

к сожалению, злоключения мои не закончились=\ я уже совсем запуталась с этой программой=\ начну сначала. смысл в том, чтобы проверить является ли последовательность "графической", то есть возможно ли создание графа из данной последовательности. для этого:
1. сортируем по убыванию
2. проверяем равны ли все элементы нулю, если это так, то последовательность является графической, если нет, переходим к пункту 3
3. если с1>n-1, где n-количество элементов неравных 0, то последовательность не является графической. если условие не выполняется, переходим к пункту 4
4. если в последовательности, начиная со второго элемента, существует как мин с1(значение первого элемента) положительных элементов, то отнимаем 1 от с1 элементов начиная от с2, убираем первый элемент и возвращаемся к пункту 1.

в программу я также вставила проверку является ли полученный граф деревом.
а теперь проблема=\
графической реализации у меня не будет, но мне нужно выписать какая вершина с которой соединяется при помощи предыдущего алгоритма. делается это на примере так:
(3,3,3,3,3,3,0,0)
1 2 3 4 5 6 7 8

т.е. вершин 9

после первого "отнимания"
3 2 2 2 3 3 0 0
1 2 3 4 5 6 7 8 соединяем 1 вершину с с1 следующих т.е.:
1 соединяем с 2,3 и 4

убираем первый элемент и сортируем:
3 3 2 2 2 0 0
5 6 2 3 4 7 8

после "отнимания":
3 2 1 1 2 0 0
5 6 2 3 4 7 8
5 соединяем с 6, 2 и 3

2 2 1 1 0 0
6 4 2 3 7 8

после:
2 1 0 1 0 0
6 4 2 3 7 8
6 соединяем с 4 и 2

1 1 0 0 0
4 3 2 7 8

после:
1 0 0 0 0
4 3 2 7 8
4 с 3
Annabel вне форума Ответить с цитированием
Старый 15.11.2009, 15:30   #8
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию

код=\


#include<iostream>
using namespace std;

void wypisz (int * tablica, int size)
{
for(int i = 0; i < size; i++) {
cout << tablica[i] << " ";
}
cout << endl;
}
void sortiruj(int * tablica, int size)
{
int pom ;
bool rob = true ;
while (rob)
{
rob = false;
for(int a=0 ; a < (size-1); a++)
{
if(tablica[a] < tablica[a+1])
{
pom = tablica[a];
tablica[a] = tablica[a+1];
tablica[a+1] = pom;
rob = true;
}
}
}
}


int main ()
{
int n,pom, suma;
cout << "kolwo elementow:"<<endl;
cin >> n;
cout<<"elementy posl"<<endl;
int posl[n];
suma=0;
for(int i=0;i<n;i++) {
cin>>posl[i];

}





int spr = -1;
while (spr == -1) {
int k = 0;
sortiruj(posl,n);
wypisz(posl,n);


int zer = 0;
for (int i = 0; i < n; i++){ // k
suma=suma+posl[i];
if(posl[i] != 0) {
k++;
}


}



for (int i = 0; i < n; i++){ //proweriajem na nuli
if(posl[i] != 0){
zer++;
}
}

if(zer == 0){

spr = 1;

} else {
cout << "n=" << n << " k=" << k << endl;


if (posl[0]>(k-1)){ //prow. punkt 3
cout << "n=" << n << " k=" << k << endl;
spr = 0;
} else {
pom = posl[0]+1; //otnimaem i umenszajem
for (int i = 0; i < pom; i++) {
if (posl[i] > 0){
posl[i] = posl[i]-1;
}
}
for (int i = 0; i < n-1; i++){
posl[i] = posl[i+1];
}
n = n-1;
for (int i = 0; i < n; i++){ //prow na nuli
if(posl[i] != 0){
zer++;
}
}
if(zer == 0){
cout << "jest2" << endl;
spr = 1;

}
}
}
}

if (spr == 1){
cout << "*** posledowatelnost' "graficzna" ***" << endl;
if (suma == 2*n-2)
{
cout << "*** Javlaetsia derewom ***" << endl;
}
else
{
cout << "*** nie Javlaetsia derewom ***" << endl;
}
}else{
cout<<"*** nie "graficzna" ***"<<endl;
}

system("PAUSE");
return 0;
}
Annabel вне форума Ответить с цитированием
Старый 15.11.2009, 15:32   #9
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию

насколько я понимаю нужно пронумеровать последовательность и далее проверять на кол-во элементов, но у меня оно нумерует с каждым повторением петли, наверное, я совсем тупа=\
Annabel вне форума Ответить с цитированием
Старый 15.11.2009, 15:45   #10
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Мда...будем разбираться...
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 15.11.2009 в 15:49.
Скарам вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоение имен формам. NSvirus PHP 2 14.10.2009 09:48
Присвоение текста в цикле AvaMight Общие вопросы Delphi 2 16.06.2009 01:23
Присвоение ID artemavd БД в Delphi 2 20.04.2009 14:45
Присвоение значений в ComboBox maxi_mum Помощь студентам 6 09.04.2009 12:48
Присвоение процедур компонентам N!ckeL Компоненты Delphi 4 26.04.2008 18:22