Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 64 из 87<  1 ... 61  62  63  64  65  66  67 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
спасибо)
но я не ввожу большие числа, так что переполнения не может быть, а в отладчике уже бывали-с :-) Там как раз хорошо видно, как они "появляются" при заходе в цикл, а до захода все нормально

Добавлено спустя 35 минут 9 секунд:
у меня вообще какие-то нелады с умножением...Не подскажите, в чем тут дело? Уже сто лет не могу понять, в чем проблема
Код:
class polynom
{

   int powers [SIZE];
   int p;
   int coeff [SIZE];
public:
       polynom & operator * (polynom);
};
polynom & polynom :: operator * (polynom a)
{
   polynom c(powers,  p, coeff);
   int j=0;
   int i;
   int k=0;
   int t=0;
   int m1c[SIZE], m1p[SIZE], m2c[SIZE], m2p[SIZE], m1[SIZE], m2[SIZE];
   int l1=p;
   int l2=a.p;
   t=k=j=0;
   for(t=0;t<=l1;t++)
      for(k=0;k<=l2;k++){
         m1[j]=c.coeff[t]*a.coeff[k];
         m2[j]=c.powers[t]+a.powers[k];
         j++;
      }
      j--;
      printf("\n");   
      k=0;
      do{
         for(t=k+1;t<=j;t++)
            if(m2[k]==m2[t]){
            m1[k]=m1[k]+m1[t];
            for(i=t;i<=j;i++){
               m1[i]=m1[i+1];
               m2[i]=m2[i+1];
            }
            j--;
            t--;
         }
         
         k++;
      }while(k<j);
      int g=0;
      for(k=0;k<=j-1;k++)
         for(t=0;t<=j-k;t++)
            if(m2[t]<m2[t+1]){
               g=m2[t];
               m2[t]=m2[t+1];
               m2[t+1]=g;
               g=m1[t];
               m1[t]=m1[t+1];
               m1[t+1]=g;
            }
   for (k=0;k<j;k++)
   {
      coeff[k] = m1[k];
      powers[k] = m2[k];
   }
   p=k-1;
   return c;
}

это умножение 2 многочленов. p счетчик слагаемых в многочлене + 2 массива - степеней и индексов. Самое интересное, что сама по себе функция рабочая, это проверено в другой проге, а вот с классом у нее не лады :D Точнее у меня с ней не лады))

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все



Партнер
 

Member
Статус: Не в сети
Регистрация: 15.08.2007
возвращаешь ссылку на локальную переменную, которая после выхода из функции ссылается непонятно на что.


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
спасибо большое :-)

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Junior
Статус: Не в сети
Регистрация: 01.01.2010
Откуда: Донецк
Помогите пожалуйста решить простую задачку. С С++ у меня как то туго, поэтому прошу помощи.началась практика...(borland)
Вообщем задание:

Дан массив фамилий студентов 1-го курса и массив их результатов в беге на 100 метров. Составьте команду из четырех лучших бегунов для участия в эстафете.

У меня вообщем кое как получилось, чтоб выводились 3 студента, но все равно как то криво.

Помогите пожалуйста


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
отсортировать массив и вывести первых 4х


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
EliteX писал(а):
Помогите пожалуйста решить простую задачку. С С++ у меня как то туго, поэтому прошу помощи.началась практика...(borland)...
Помогите пожалуйста

Кинь в [code]-tag что у тебя есть - укажем на ошибу(и). С++ и С любит трудолюбивых... За тебя лабу никто делать не будет...


 

Junior
Статус: Не в сети
Регистрация: 01.01.2010
Откуда: Донецк
это я понимаю, что за меня делать никто не будет.
Вот щас сделал сортировку методом пузырька -результатов. А как сделать так чтоб этим результатам соответсвовал студент?


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
EliteX писал(а):
это я понимаю, что за меня делать никто не будет.
Вот щас сделал сортировку методом пузырька -результатов. А как сделать так чтоб этим результатам соответсвовал студент?

Ну никто не заставляет сделать сортировку quicksort`oм ! Делай что хочешь - покажи свои наработки - укажем правильный путь и объясним ошибки. А так - нет о чём говорить...


 

Junior
Статус: Не в сети
Регистрация: 01.01.2010
Откуда: Донецк
Вот код. Препод сказала что так правлиьно, только нужно доработать. Извините что без комментов, если надо, напишу

Код:
#include <conio.h>
#include <iostream.h>

void std( char p[][40], int);
void rez(int*, int);

void main()

{
 clrscr();
 char student[10][40];
 int k;
 cout<<"Количество студентов\n";
 cin>>k;


cout<<"Фамилии студентов\n";
 std(student,k);
 int rezult[10];
 cout<<"Их резултаты\n";
 rez(rezult,k);
 int max,i,tmp,j;
 tmp=0;

 for (j=0;j<4;j++)
 {max=0;
   for(i=tmp;i<k;i++)
    if (rezult[i]>max)
    {
     max=rezult[i];
     tmp=i;
    }
   cout<<max<<" "<<student[tmp]<<"\n";
   tmp+=1;
 }
 getch();
}

 void std(char p[][40], int n)
 {
  int i;
  for(i=0;i<n;i++)
  cin>>p[i];
 }

 void rez(int *p, int n)
 {
  int i;
  for (i=0;i<n;i++) cin>>p[i];
 }


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
доброго времени суток) Простите, но это опять я :insane:
умножение многочленов - все никак не отладить. Вот, например (x+1)*(x+1) верно, а (x+1)*(x^2-x+1) уже нет
Код:
polynom & polynom :: operator * (polynom a)
{
   int j=0;
   int i;
   int k=0;
   int t=0;
   int m1c[SIZE], m1p[SIZE], m2c[SIZE], m2p[SIZE], m1[SIZE], m2[SIZE];
   int l1=p;
   int l2=a.p;
   t=k=j=0;
   for(t=0;t<l1;t++)
      for(k=0;k<l2;k++){
         m1[j]=a.coeff[t]*coeff[k];
         m2[j]=a.powers[t]+powers[k];
         j++;
      }
      j--;
      k=0;
      do{
         for(t=k+1;t<=j;t++)
            if(m2[k]==m2[t]){
            m1[k]=m1[k]+m1[t];
            for(i=t;i<=j;i++){
               m1[i]=m1[i+1];
               m2[i]=m2[i+1];
            }
            j--;
            t--;
         }
         
         k++;
      }while(k<j);
      int g=0;
      for(k=0;k<=j-1;k++)
         for(t=0;t<=j-k;t++)
            if(m2[t]<m2[t+1]){
               g=m2[t];
               m2[t]=m2[t+1];
               m2[t+1]=g;
               g=m1[t];
               m1[t]=m1[t+1];
               m1[t+1]=g;
            }
   for (k=0;k<=j;k++)
   {
      this->coeff[k] = m1[k];
      this->powers[k] = m2[k];
   }
   this->p=k;
   return *this;
}

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
EliteX писал(а):
Вот код...


Для начала уберём "явные косяки":
1.)
Код:
cout<<"Количество студентов\n";
cin>>k;

Если k>=10, то переполнение массивов и полный бред в проге...
То же касается если фамилия больше 39 символов. Массив не "обнулён", т.е. нет завершающего \0 символа.

2.)
Вот тут:
Код:
tmp=0;
for (j=0;j<4;j++)
{max=0;
   for(i=tmp;i<k;i++)
    if (rezult[i]>max)
    {
     max=rezult[i];
     tmp=i;
    }
   cout<<max<<" "<<student[tmp]<<"\n";
   tmp+=1;
}

Всё-таки лучше "банальный пузырь" и выводим лучшую 4-ку, а так... бред, особенно во внутреннем цикле. без сортировки можно было бы сделать, но либо изменением i или используя while.
Инициализация счётчика в for происходит перед организацией цикла, и никакие изменения tmp во внутреннем цикле тут не помогут.

З.Ы. К примеру. если мы ввели "самого быстрого" последним, то после первого прохода внешнего цикла по j получаем tmp==k, а при следующем проходе цикла по j внутренний цикл ни разу не выплняется, т.к. i == k и никак не меньше k...


Последний раз редактировалось oxy 20.03.2010 1:09, всего редактировалось 1 раз.

 

Junior
Статус: Не в сети
Регистрация: 01.01.2010
Откуда: Донецк
Те косяки не важны, насчет фамилии и количества. Понимаю, что не правильно но все же.

А по поводу пузыря- им то я сортирую только массив с результатами, а фамилии остаются то на своих прежних местах. Поэтму и интересуюсь как исправить.

Код:
#include <conio.h>
#include <iostream.h>

void std( char p[][40], int);
void rez(int*, int);
void sort(int n, int mas[]);

void main()

{
 clrscr();
 char student[10][40];
 int k;
 cout<<"Kol-vo strok\n";
 cin>>k;


cout<<"familii studentov\n";
 std(student,k);
 int rezult[10],i;
 cout<<"Ix rezultat\n";
 rez(rezult,k);


  sort(k,rezult);

  for (i=0;i<k;i++)
  cout<<rezult[i]<<" ";


 getch();
}




 void std(char p[][40], int n)
 {
  int i;
  for(i=0;i<n;i++)
  cin>>p[i];
 }


 void rez(int *p, int n)
 {
  int i;
  for (i=0;i<n;i++) cin>>p[i];
 }


inline void swap(int &a, int &b) //smena
{
 int buf=a;
 a=b;
 b=buf;
}


void sort(int n, int mas[])//sortirovka
{
 for (int i=0;i<n;i++)
   for (int j=0;j<n;j++)
    if (mas[j]>mas[j+1])
    swap(mas[j],mas[j+1]);
}


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
EliteX писал(а):
...А по поводу пузыря- им то я сортирую только массив с результатами, а фамилии остаются то на своих прежних местах. Поэтму и интересуюсь как исправить...


:lol: Чудесно :lol: В результате "дистрофик Петров" может получить КМСа.

struct в зубы и memmove или memcpy в помощь.

З.З. Менять не только результаты надо, но и фамилии... Пока ты отвечал, я подправил свой ответ...


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
EliteX

зачем отдельные массивы? надо все в одном держать, тогда и проблем не будет

кстати, какой древности компилятор? STL не изучаете?

на современном С++ все это делается в полпинка:

Код:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct StudentResult
{
   string name;
   double result;
};

bool operator < (const StudentResult &sr1, const StudentResult &sr2)
{
   return sr1.result < sr2.result;
}

istream& operator >> (istream& in_stream, StudentResult &val)
{
   in_stream >> val.name;
   in_stream >> val.result;

   return in_stream;
}

ostream& operator << (ostream& out_stream, const StudentResult &val)
{
   out_stream << "name:\t" << val.name << "\t";
   out_stream << "result:\t" << val.result << "\n";

   return out_stream;
}


int main()
{
   const int count_team_members = 4;
   vector<StudentResult> students;

   cout << "Input name and result, ^Z for end.\n";
   for(;;)
   {
      StudentResult cur_input_value;            
      cin >> cur_input_value;
      if(cin.eof())
         break;
      students.push_back(cur_input_value);
   }

   if(students.size() < 4)
   {
       cout << "Error. Number of records must be greater or equal to " << count_team_members << "\n";
       return 1;
   }

   partial_sort(students.begin(), students.begin() + count_team_members, students.end());

   for(vector<StudentResult>::const_iterator cur_student = students.begin();
      cur_student != students.begin() + count_team_members;
      ++cur_student)
   {
      cout << *cur_student;
   }

   return 0;
}


 

Junior
Статус: Не в сети
Регистрация: 01.01.2010
Откуда: Донецк
Компилятор версии 3.1(


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
EliteX писал(а):
Компилятор версии 3.1(

На BC 3.1 версия progn скомпилится и заработает. Вопрос: вам уже преподавали C++ или только С?


 

Junior
Статус: Не в сети
Регистрация: 01.01.2010
Откуда: Донецк
Тогда огромное спасибо.
Эмм... как Вам объяснить, преподы на уроках практически ничего по теме не рассказывали, изредка выдавали лабораторки и говорили делайте. Так что думаю слово Преподавали звучит громко) А вообщем научить хотят С++

И два массива даны по условию


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
EliteX писал(а):
Тогда огромное спасибо.
И два массива даны по условию


Не понял "тупое задание". Один массив классов/структур - я понимаю (Это без использования STL), но принудительное использование двух массивов - :?: А где смысл/логика?


З.Ы. В случае "тупого задания с двумя массивами" - memcpy и их модификации в зубы и в пальцы.


 

Junior
Статус: Не в сети
Регистрация: 01.01.2010
Откуда: Донецк
Да, задание тупое, просит два массива.

Спасибо, буду пытаться.


 

Junior
Статус: Не в сети
Регистрация: 06.01.2008
Как изменить программу, чтобы выводился полый квадрат?
Код:
#include <stdio.h>

int main()
{
   int x, y, i;
   
   printf( "Введите размерность квадрата: " );
   scanf( "%d", &x );
   
   y = 0;
   
   while ( y != x ) {
      i = 0;      
      while ( i != x ) {
            printf( "*" );
            i++;
         }

      printf( "\n" );
      y++;

   }
   
   return 0;
   
}


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 64 из 87<  1 ... 61  62  63  64  65  66  67 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan