Форум программистов, компьютерный форум CyberForum.ru

При передаче в функцию динамического массива, в массиве искажаются данные - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция вставки символа в начало строки http://www.cyberforum.ru/cpp-beginners/thread1160858.html
Здравствуйте,не подскажите как должна быть написана это функция Функция void insertOneSymb(char* str, char symb) получает строку, символ symb и вставляет его в начало строки.
C++ Вывести данные о премированных работниках из файла на экран Записать в файл данные о работниках предприятия(используя структуру), вывести данные о премированных работниках из файла на экран http://www.cyberforum.ru/cpp-beginners/thread1160848.html
Вызов конструктора базового класса из класса-наследника C++
Можно ли вне списка инициализации вызвать конструктор базового класса ? class A { int a; public: A(int c):a(c){} }; class B :public A
Ошибка в реализации хеш-функции SHA1 C++
Здравствуйте, Решил написать простую реализацию, но результат вычислений оставляет желать лучшего Подскажите, пожалуйста, какой нюанс я упустил при построении? Доп. функции: typedef unsigned char byte; typedef unsigned int uint; const inline uint SHA1::LeftRotate(uint Value, uint Shift) const noexcept { return Value << Shift | Value >> (32 - Shift);
C++ Как правильно размещать классы http://www.cyberforum.ru/cpp-beginners/thread1160753.html
Доброго времени суток. При написании проекта, состоящего из большого количества файлов из-за путаницы и непонятных багов возник вопрос - как же все-таки правильно размещать классы? Писать их в хедер или CPPшник? Методы класса пока пишу в нем самом, но если захочу оттуда перенести, то можно ли переносить в другой файл? Если класс размешен в пространстве имен, то как это повлияет на все...
C++ Найти количество пассажиров, количество вещей которых превышает среднее число вещей Багаж пассажира характеризуется количеством вещей и общим весом вещей. Даны сведения о багаже ​​нескольких пассажиров. Найти количество пассажиров, количество вещей которых превышает среднее число вещей Никак не могу понять как это сделает помогите пожалуйста подробнее

Показать сообщение отдельно
Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
01.05.2014, 10:27  [ТС]     При передаче в функцию динамического массива, в массиве искажаются данные
Цитата Сообщение от aLarman Посмотреть сообщение
о еще косяк, почему то для последнего символа в тексте делается лишний w[i]+=1; т.е в моем тексте "а" попадается 2 раза а по выходу из цикла для "а" частота 3
да, это косяк, я его уже тоже заметила, он происходит из-за того, что в конце текста ничего нет, но все равно цикл запускается при ch=' ', пробовала ставить условие : если ch='\0', то цикл не запускать, но цикл все равно запускается. В итоге сделала в окончании цикла w[i]--ж тогда частота последнего символа считается верно

Добавлено через 2 минуты
Цитата Сообщение от aLarman Посмотреть сообщение
и еще после метода shake получилось так что символ с частотой 4 был на 1ом месте с частотой 2 на 2ом месте с частотой 3 на 3ем месте, я думаю так же где то косяк, насчет самого меода shake я как понял результатом должен быть массив в котором упорядоченны частоты появляения символов по убыванию, + в массиве CHAR символы так же переставляются на места их частот, один вопрос - а че как сложно алгоритм сделан? у Вас там сложность чуть примерно 2*N^2
Ну тут все просто, выпендриться хотела, типа крутой метод сортировки, благо он у меня есть с другого предмета (сама делала). Я что-то запуталась, думала так будет лучше, но думаю теперь что лучше пузырьковую сортировку применить...

Добавлено через 14 минут
Цитата Сообщение от aLarman Посмотреть сообщение
аналогичный косяк
C++
1
2
3
4
5
6
7
8
9
10
for (i=1; i<N; i++)
  {
    for (j=0;j<L[i];j++)
    {
      Q[i-1]=Q[i-1]*2.0;//при i == 0 выход за пределы
      C[i][j]=(int)(Q[i-1]);//при i == 0 выход за пределы
      if(Q[i-1]>1.0)//при i == 0 выход за пределы
        Q[i-1]=Q[i-1]-1.0;//при i == 0 выход за пределы
    }
  }
Правильно, при i=0 косяк, только i здесь изменяется с 1, чтобы не было косяка, а Q[0]=0 -перед циклом.

Добавлено через 3 минуты
Цитата Сообщение от aLarman Посмотреть сообщение
да не совсем понял что тут за действия
C++
1
2
3
4
5
Q[0]=0;
  for (i=1; i<N; i++)
  {
    Q[i]=Q[i-1]+p[i];
  }
но руководствоваясь логикой думаю тут должно быть так
C++
1
2
3
4
5
Q[0]=p[0];
  for (i=1; i<N; i++)
  {
    Q[i]=Q[i-1]+p[i];
  }
Не, тут другая логика , тут Q[0]=0, Q[1]=Q[0]+P[1],...Q[n]=1(так как сумма вероятностей равна 1), но последнее значение Q мне не нужно в дальнейшем, поэтому расчет останавливается на Q[n-1] считает.

Добавлено через 6 минут
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
for (i=0; i<N; i++)
  {
    L[i]=-ceil(log(p[i])/log(2.0));
    if(1.0/pow(2.,-1*L[i])>p[i])
      L[i]++;
    if (i==0)
      L[i-1]=1;//тут косяк при i == 0 за пределы массива выходим
    if (1.0/pow(2,-1.0*L[i-1])<p[i])
      printf("\n ЌҐЇа ўЁ«м*® а ббзЁв * *¤«Ё* *Є®¤®ў®Ј® б«®ў *пїЅҐ**®* !!!");
  }
Это я специально сделала, но вы наверное правы, это наверное неправильно, мне для расчета нужно L[-1]которого нет.

Добавлено через 20 минут
исправила код:
C++
1
2
3
4
5
6
7
8
9
10
 for (i=0; i<N; i++)
 {
  L[i]=-ceil(log(p[i])/log(2.0));
  if(1.0/pow(2,-1*L[i])>p[i])
    L[i]++;
  if (i==0)
    l=1;
  else
    l=L[i-1];
  if (1.0/pow(2,-1.0*l)<p[i])
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru