forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Памагите новичку (http://forum.boolean.name/showthread.php?t=8500)

Mr_F_ 18.06.2009 14:43

Памагите новичку
 
-------разобрался

Mr_F_ 20.06.2009 03:18

Ответ: Памагите новичку
 
буквально позавчера начал изучать язык)

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

для начала бы хотелось узнать как там делать переборы наподобие блицевского for...each)

ну и бонусом был бы рад узнать, есть ли какие-нибудь более быстрые методы чем полный перебор.

jimon 20.06.2009 03:51

Ответ: Памагите новичку
 
Mr_F_
создай список и заноси туда обьекты, более быстрые - сделать отсортированый масив и использовать двоичный поиск к примеру

Genius 27.06.2009 22:43

Ответ: Памагите новичку
 
Цитата:

Сообщение от Mr_F_ (Сообщение 108322)
буквально позавчера начал изучать язык)

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

для начала бы хотелось узнать как там делать переборы наподобие блицевского for...each)

ну и бонусом был бы рад узнать, есть ли какие-нибудь более быстрые методы чем полный перебор.

Про for
int data[10];
for( int i=0; i < 10; i++ )
{
data[i]=i;
}

Можно хранить объекты в std::map

Например

struct Object
{
....
};

std:map<Object*,int> objects;

запись:
Object* myObject = new Object();
int integer = 5;
objects[integer] = myObject;

получение
Object* obj = objects[integer];

так-же для проверки существует ли объект по нужному индификатору можно с помощью функции objects.find(...),тоесть:

if(objects.find(integer) == objects.end())
{

не существует
}else{

существует
}

можно юзать std::vector для хранения

поиск легко делать:

std::vector<Object*>::iterator i = find(objects.begin(),objects.end(),object);
Ну это поиск не в этом смысле слова. Просто получаем возможность узнать если объект в векторе или нет и получаем его итератор после чего сможем с ним манипулирова удалить\переместить.

А вообще купи се книгу,Полный справочник по С++,автор Герберт Шилдт,очень хорошая книжка.

Chakki 29.06.2009 12:08

Ответ: Памагите новичку
 
Попытался отсортировать матрицу
Вот код самой сортировки:
Код:

// Сортировка матрицы
// Chakki.F

#include "stdafx.h"
#include "conio.h"
#include "iostream"
#define n 3
#define m 3

using namespace std;


int main()
{
// Обьявление переменных и ввод массива ---------------------
        cout << "Enter 9 numbers: \n" << '\n';
        int arr[n][m],i,j,a,k;
        int temp;
        int size;

        size = n*m;
        a = 0;

        for(i=0;i<n;i++)
        {  for(j=0;j<m;j++)
        {  cin >> arr[i][j];
        } }
// Вывод исходного массива -----------------------------------
        cout << "Your array:\n" << '\n';

        for(i=0;i<n;i++)
        {  cout << '\n';
                for(j=0;j<m;j++)
        {  cout << arr[i][j] << ' ';
        } }
        cout << '\n' << '\n';
// Сортировка -------------------------------------------------
    for(k=0;k<size;k++)
{        for(i=1;i<size;i++)
        {  for(j=size-1;j>=size;j--)
        {  if(arr[j-1][a] > arr[j][a])
        {  temp = arr[j-1][a];
          arr[j-1][a] = arr[j][a];
          arr[j][a] = temp;
        }  } }
    a++;
}

// Вывод -------------------------------------------------------
        cout << "New array:\n" << '\n';
        for(i=0;i<n;i++)
        {  cout << '\n';
        {  for(j=0;j<m;j++)
        { 
                cout << arr[i][j] << ' ';
        }
        }  }

// -------------------------------------------------------------------
        printf("Press any key to continue...\n");
    getch();

        return 0;
// --------------------------------------------------------------------
}

сам пытался разобратся, и помоему компилятор вообще игнорирует сортировку, либо это я вообще не правильно написал
укажите на ошибку пожалуйста =)

jimon 29.06.2009 12:39

Ответ: Памагите новичку
 
вот какой у тебя код
Код:

for(k[=0;k<size;k++)
{
        for(i=1;i<size;i++)
        {
                for(j=size-1;j>=size;j--)
                {
                        if(arr[j-1][a] > arr[j][a])
                        {
                                temp = arr[j-1][a];
                                  arr[j-1][a] = arr[j][a];
                                  arr[j][a] = temp;
                        }

                }
        }
            a++;
}

как видишь у тебя нету использования переменных k и i
написанный таким образом код перестановки сортирует только внутри строки, те будет только отсортирована каждая строка, между строками сортировки не будет

так какая тебе сортировка надо ? для матрицы очень много способов есть её отсортировать :)

Chakki 29.06.2009 12:53

Ответ: Памагите новичку
 
метод неважен)))
есть задача: отсортировать матрицу n*m =)
у мен с сортировками очень плохо, уже пару дней пытался догнать)))

обнаружил косячек, ну теперь начал чтото делать, но что непонятно оО

Код:

for(k[=0;k<size;k++)
{
        for(i=1;i<size;i++)
        {
                for(j=size-1;j>=i;j--)
                {
                        if(arr[j-1][a] > arr[j][a])
                        {
                                temp = arr[j-1][a];
                                  arr[j-1][a] = arr[j][a];
                                  arr[j][a] = temp;
                        }
                }
        }
            a++;
}

k - использовал как счетчик, но все равно все не то
голова уж пухнет, практика стоит, а скоро еще и защищать :D

jimon 29.06.2009 14:32

Ответ: Памагите новичку
 
вот такой код сортировки должен работать

Код:

for(int i=0;i<size;i++)
{
        for(int j=0;j<size-1;j++)
        {
                for(int k=j+1;k<size;k++)
                {
                        if(arr[i][j-1] > arr[i][j])
                        {
                                int temp = arr[i][j];
                                arr[i][j] = arr[i][j-1];
                                arr[i][j-1] = temp;
                        }
                }
        }
}


Chakki 29.06.2009 15:32

Ответ: Памагите новичку
 
Run-Time Check Failure #2 - Stack around the variable 'arr' was corrupted.
компилятор весь день шалит, сейчас выдал это.
Первый раз скомпилировал норм, выдал в отсортированном массиве вообще непонятные числа оО
второй раз ниче не менял откомпилировал, запустил, и в конце это выдал

jimon 29.06.2009 16:38

Ответ: Памагите новичку
 
ух, недоглядел :) вот рабочий код

Код:

#include <iostream>

#define N 3
#define M 3

int main()
{
        int arr[N][M];

        for(int i=0;i<N;i++)
                for(int j=0;j<M;j++)
                        std::cin >> arr[i][j];

        for(int i=0;i<N;i++)
                for(int j=0;j<M-1;j++)
                        for(int k=M-1;k>j;k--)
                                if(arr[i][k-1] > arr[i][k])
                                {
                                        int temp = arr[i][k];
                                        arr[i][k] = arr[i][k-1];
                                        arr[i][k-1] = temp;
                                }

        for(int i=0;i<N;i++)
        {
                for(int j=0;j<M;j++)
                        std::cout << arr[i][j] << " ";
                std::cout << std::endl;
        }

        return 0;
}


Chakki 29.06.2009 16:53

Ответ: Памагите новичку
 
Благодарю =)

Chakki 01.07.2009 12:16

Ответ: Памагите новичку
 
задали задачу создать список из n элементов и там далее вычисления, это пока не важно)
и вот вопрос, зделать его массивом
или использовать библиотеку <list>
и создавать на самом деле список list<int> бла бла бла и так далее?)

jimon 01.07.2009 12:41

Ответ: Памагите новичку
 
Chakki
тебе же написали что список, значит список

IGR 01.07.2009 14:45

Ответ: Памагите новичку
 
Цитата:

задали задачу создать список из n элементов и там далее вычисления, это пока не важно)
и вот вопрос, зделать его массивом
или использовать библиотеку <list>
и создавать на самом деле список list<int> бла бла бла и так далее?)
ну смотря кто и как задал !!
ели ты учишся там где-тов школе или универе, то такие задания дают для того что бы студент разобрался в самом принципе работы связаных списков, нада вручную добавлять, изменять, удалять !!
можно заюзать контейнер ЛИСТ, там все ети алгоритмы уже есть !! тебе остается их только применить к своему контейнеру !! работать все будут на ура !! но принципе этой работы тоже знать нада !! :)

SBJoker 01.07.2009 15:01

Ответ: Памагите новичку
 
ВИдимо у тебя !! это признак конца строки... :)


Часовой пояс GMT +4, время: 04:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot