AlexSaaa
22:09:2005, 09:49
Суть в том, что нужно пройтись по массиву структур и элементы, которые не повторяются скопировать в массив **Д
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] для оформления исходного текста
AlexSaaa
22:09:2005, 12:23
i было объявлено выше.. с этим все нормально
вообще комилятор не выдает сообщений о ошибках..
вернее шибка есть но она скоре всего логическая а е в коде
программа работает не так как хотелось бы...
то есть в массив Д переносится все элементы структуры arr[j].В
а хотелось бы только те что не повторяются...
бай зе вей ..там не смайл а элемент В
AlexSaaa
22:09:2005, 14:43
не хотел открывать новую тему .. тут и так только мои темы...
предыдущий вопрос все еще актуальный..
но назрел овый вопрос относительна сортировки массива структур
привожу код
Цитата
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[i].N;
temp.B=array[i].B;
temp.C=array[i].C;
array[i].N=array[min].N;
array[i].B=array[min].B;
array[i].C=array[min].C;
array[min].N=temp.N;
array[min].B=temp.B;
array[min].C=temp.C;
}
}
Для: AlexSaaa:
Вам про отладку не рассказывали еще? Когда программа не работает, надо не вопросы в форуме задавать, а садиться и по шагам смотреть как твой алгоритм работает, если не умеешь на машине - бери листок бумаги.
В твоем случае, впрочем, отладка мало поможет, только увидеть, что все работает не так как ты думаешь. Наводящие вопросы - Сколько элементов будет в D? Что, по-твоему делает break в цикле? Что мешает Strcpy вызываться для каждого элемента?
А вот сортировка с первого взгляда нормальная. Разве что присваивание строк вряд ли делает то, что ты хотел.
В целом - это вас учат прописывать размер массива константой прямо в коде, без define\const?
AlexSaaa
23:09:2005, 06:16
возможно что-то не так понимаю.. но в моем представлении все должно работать нормально... перечитал на всякий многомерные динамические массивы...
Цитата
Сколько элементов будет в D?
5х32-->5 указателей на char массивы размерм 32...
Цитата
Что, по-твоему делает break в цикле?
когда писал был уверен ,что break обезпечит досрочно прервет цыкл
for (int j=0; j<i; ++j)
позволит перейти к следующей итерации цыкла
for(i=0; i<5; ++i)Цитата
Что мешает Strcpy вызываться для каждого элемента?
не знаю((
Цитата
Разве что присваивание строк вряд ли делает то, что ты хотел.
чем можна заменить операцию присваивания?
AlexSaaa
23:09:2005, 06:20
нашел ошибку в первом..думаю как можна исправить
AlexSaaa
23:09:2005, 07:02
нет..не нашел..совсем запутался
AlexSaaa
23:09:2005, 10:34
Цитата
for(i=0; i<5; ++i){
int idx=0;
for(int j=i; j>=0; --j)
if(strcmp(arr[i].B, arr[j].

==0){
++idx;
break;
}
if(idx==0){strcpy(D[k], arr[i].

; ++k;}
}
переписал..но получился полный бред
Ну, гораздо лучше

Идея правильная, и реализация почти
Единственное замечание - поиск повтора в части массива ничего не даст - то, что ты ищешь, может быть и во второй части. Может, ты просто не там ищешь?
AlexSaaa
23:09:2005, 12:47
на самом...
задача в том что бы не перенсти в Д массив елементы, что повторяются...
то есть не должно быть дублирования елементов в массиве де..каждый елемент копируються только один раз.. отсюда и проверка толко части массива..то есть по умолчани слева от елемента j -элементы которые уже должны присутствовать в массиве Д.. если нет ..то j копруеться в Д
и все равно не работает... совсем не работает
А, так повторяющийся элемент надо записывать тоже, но один раз? Я не понял. Тогда почти все правильно - просто у тебя на первой итерации всегда i=j, соответственно ничего в массив не пишется.
AlexSaaa
23:09:2005, 17:03
а тут я не совсем понял...
чему должно равнятся j?
можна уточнить....
Ну чему оно должно равняться я не знаю, это зависит от твоей реализации

но в if'e
if(strcmp(arr[i].B, arr[j].B )==0){
++idx;
break;
}
При i=j условие всегда верно, так что в наполнение D ты никогда не попадешь.
AlexSaaa
24:09:2005, 06:35
спасибо..сделал...все оказывается так просто)))
AlexSaaa
28:09:2005, 10:36
нужно написать что-то наподобии счетчика слов в тексте..
решил сделать через структуры..возможно не оптимальный вариант..зато простой..собственный.. и для ньюби .. так вот не могу присвоить елемент строчки(слово) элементу структуры..
ниже привожу код
Цитата
struct Freq{
char*Word[32];
int Quant;
}*arr=new Freq[Size];
int main(){
k=0;
cin.getline(Line, 100);
while(Line[i]!='\0'){//words in Line
if (Line[i]==' ')
if(Line[i+1]!=' ')++Size;
++i;};
for(i=0; i<Size; ++i){
strncpy(*arr[i].Word, Line, strlen(Line)-strlen(strchr(Line, ' ')));
}
.
................
подскажите где здесь ошибка?
эт не окончательный вариант.. пока хотелось бы заполнить arr[i].Word первым словом Лайна..потом подумаю как дальше делать
AlexSaaa
29:09:2005, 09:51
млять..єт *:?%%; полный ..мож бросить все это пока не поздно..(((
marco manti
1:11:2005, 21:50
!!! 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);
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.