Помогите найти ошибку..+сортировка Struct

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

AlexSaaa

Суть в том, что нужно пройтись по массиву структур и элементы, которые не повторяются скопировать в массив **Д

Код:
char **D;
D=new char*[5];
for(i=0; i<5; ++i) D[i]=new char [32];


for(i=0; i<5; ++i){
 
for (int j=0; j<i; ++j)
 if(strcmp( D[i], arr[j].B)==NULL) break;
strcpy(D[i], arr[j].B);
}


используй тэг [СODE] для оформления исходного текста
 
A

AlexSaaa

i было объявлено выше.. с этим все нормально

вообще комилятор не выдает сообщений о ошибках..
вернее шибка есть но она скоре всего логическая а е в коде
программа работает не так как хотелось бы...
то есть в массив Д переносится все элементы структуры arr[j].В
а хотелось бы только те что не повторяются...

бай зе вей ..там не смайл а элемент В
 
A

AlexSaaa

не хотел открывать новую тему .. тут и так только мои темы...

предыдущий вопрос все еще актуальный..
но назрел овый вопрос относительна сортировки массива структур



привожу код
struct A{
char B[32];
char C[32];
int N;
};


void Sort(A array[])
{

int i, j; 
int min;
A temp;

for(i = 0; i < 5 - 1; i++){
min = i;
for(j = i + 1; j < 5; j++){
  if(array[j].N < array[min].N) min = j;
        }
if(min==i)continue;

temp.N=array.N;
temp.B=array.B;
temp.C=array.C;

array.N=array[min].N;
array.B=array[min].B;
array.C=array[min].C;

array[min].N=temp.N;
array[min].B=temp.B;
array[min].C=temp.C;


}
}
 
G

Guest

Для: AlexSaaa:
Вам про отладку не рассказывали еще? Когда программа не работает, надо не вопросы в форуме задавать, а садиться и по шагам смотреть как твой алгоритм работает, если не умеешь на машине - бери листок бумаги.
В твоем случае, впрочем, отладка мало поможет, только увидеть, что все работает не так как ты думаешь. Наводящие вопросы - Сколько элементов будет в D? Что, по-твоему делает break в цикле? Что мешает Strcpy вызываться для каждого элемента?

А вот сортировка с первого взгляда нормальная. Разве что присваивание строк вряд ли делает то, что ты хотел.

В целом - это вас учат прописывать размер массива константой прямо в коде, без define\const?
 
A

AlexSaaa

возможно что-то не так понимаю.. но в моем представлении все должно работать нормально... перечитал на всякий многомерные динамические массивы...
Сколько элементов будет в D?
5х32-->5 указателей на char массивы размерм 32...

Что, по-твоему делает break в цикле?
когда писал был уверен ,что break обезпечит досрочно прервет цыкл for (int j=0; j<i; ++j)
позволит перейти к следующей итерации цыкла for(i=0; i<5; ++i)


Что мешает Strcpy вызываться для каждого элемента?
не знаю((

Разве что присваивание строк вряд ли делает то, что ты хотел.
чем можна заменить операцию присваивания?
 
A

AlexSaaa

нашел ошибку в первом..думаю как можна исправить
 
A

AlexSaaa

нет..не нашел..совсем запутался
 
G

Guest

Ну, гораздо лучше :(
Идея правильная, и реализация почти :(
Единственное замечание - поиск повтора в части массива ничего не даст - то, что ты ищешь, может быть и во второй части. Может, ты просто не там ищешь? :)
 
A

AlexSaaa

на самом...
задача в том что бы не перенсти в Д массив елементы, что повторяются...
то есть не должно быть дублирования елементов в массиве де..каждый елемент копируються только один раз.. отсюда и проверка толко части массива..то есть по умолчани слева от елемента j -элементы которые уже должны присутствовать в массиве Д.. если нет ..то j копруеться в Д

и все равно не работает... совсем не работает
 
G

Guest

А, так повторяющийся элемент надо записывать тоже, но один раз? Я не понял. Тогда почти все правильно - просто у тебя на первой итерации всегда i=j, соответственно ничего в массив не пишется.
 
A

AlexSaaa

а тут я не совсем понял...
чему должно равнятся j?
можна уточнить....
 
G

Guest

Ну чему оно должно равняться я не знаю, это зависит от твоей реализации :(
но в if'e
Код:
 if(strcmp(arr[i].B, arr[j].B )==0){
 ++idx;
 break;
}
При i=j условие всегда верно, так что в наполнение D ты никогда не попадешь.
 
A

AlexSaaa

спасибо..сделал...все оказывается так просто)))
 
A

AlexSaaa

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


struct Freq{
char*Word[32];
int Quant;
}*arr=new Freq[Size];


int main(){
k=0;
cin.getline(Line, 100);
while(Line!='\0'){//words in Line
if (Line==' ')
if(Line[i+1]!=' ')++Size;
++i;};

for(i=0; i<Size; ++i){
strncpy(*arr.Word, Line, strlen(Line)-strlen(strchr(Line, ' ')));
}

.
................



подскажите где здесь ошибка?

эт не окончательный вариант.. пока хотелось бы заполнить arr.Word первым словом Лайна..потом подумаю как дальше делать
 
A

AlexSaaa

млять..єт *:?%%; полный ..мож бросить все это пока не поздно..(((
 
M

marco manti

!!! COM !!!
mmm.obj : error LNK2001: unresolved external symbol _IID_IBasicAudio
(_IID_IMediaPosition,_CLSID_FilterGraph...)
Я понимаю что я что-то не включил, но если кто-то сталкивался - ПОМОГИТЕ!!!
Причем вроде-бы все учел:
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGB);
pGB->QueryInterface(IID_IMediaPosition, (void **)&pMP);
pGB->QueryInterface(IID_IBasicAudio, (void **)&pBA);
pGB->RenderFile(wFile, NULL);
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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