Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2009, 22:31   #1
centnew
Новичок
Джуниор
 
Регистрация: 27.07.2009
Сообщений: 2
По умолчанию

Всем доброго дня!
У меня проблема с программой она неможет вычеслять огромные результаты то процесс уходит в бесконечность то вылетает run time error, помогите с решением!
Код:
/* Задача: Составить программу для вычисления степеней чисел вида  an, если  a > MaxInt,  n > 10. */

#include <iostream>
#include <conio.h>

#define int_max 10000
void perevorot(int mas[], int x)
{
   int tmp,i,j;
   j=x;
   for(i=0;i<j;i++){
      j--;
      tmp=mas[j];
      mas[j]=mas[i];
      mas[i]=tmp;
   }
}
int addsum(int outmas[],int x,int mas[], int z)
{
   perevorot(mas,z);
   perevorot(outmas,x);
   int overbit=0,i=0,j;
   j=z;
   j--;
   while(i<j){
      outmas[i]+=mas[i];
      outmas[i]+=overbit;
      if (outmas[i]>9) {
         outmas[i]-=10;
         overbit=1;
      } else overbit=0;
        i++;
   }
   outmas[i]+=mas[i];
   outmas[i]+=overbit;
   if (outmas[i]>9){
      outmas[i]-=10;
      i++;
      outmas[i]+=1;
   }
   i++;
   perevorot(outmas,i);
   perevorot(mas,z);
   return i;
}

int umnoj(int outmas[],int x,int tmas1[], int z1, int tmas2[], int z2)
{   
   int i,q=0;
   for(i=0;i<int_max;i++) outmas[i]=0;
   int mas1[int_max],mas2[int_max];
   for(i=0;i<int_max;i++) mas1[i]=mas2[i]=0;
   for(i=0;i<int_max;i++) {
      mas1[i]=tmas1[i];
      mas2[i]=tmas2[i];
   }
   perevorot(mas1,z1);
   perevorot(mas2,z2);
   int j=0,st=0,razryad=0,nommas=0;
   int tmp[int_max];
   for(i=0;i<int_max;i++) tmp[i]=0;
   for(razryad=0;razryad<z2;razryad++){
         nommas=razryad;
      for(j=0;j<z1;j++){
                  //перебор
         tmp[nommas]+=(mas1[j]*mas2[razryad])%10;
         nommas++;
         tmp[nommas]+=(mas1[j]*mas2[razryad])/10;

      }
      if ((mas1[j]*mas2[razryad])>9||z1==1) nommas++;
      perevorot(tmp,nommas);
      q=addsum(outmas,q,tmp,nommas);
      for(st=0;st<int_max;st++)
         tmp[st]=0;
   }
   return q;
}
int stepen(int outmas[],int n,int inmas[], int x,int st)
{   
   int i,j;
   if(st==0) {
      for(i=0;i<int_max;i++) outmas[i]=0;
      outmas[0]=1;
      return 1;
   }else if(st==1){
      for(i=0;i<int_max;i++) outmas[i]=inmas[i];
      return x;
   }
   int a[int_max];
   n=umnoj(outmas,n,inmas,x,inmas,x);
   for(i=3;i<=st;i++){
      for(j=0;j<int_max;j++) a[j]=outmas[j];
      n=umnoj(outmas,n,a,n,inmas,x);
   }
   return n;
}
int vvodchisla(int mas[])
{
   using namespace std;
   char c=0;
   int i,top=0;
   for(i=0;i<int_max;i++) mas[i]=0;
   while (c!=13){
      c=getch();
      if(c<='9'&&c>='0') {
         if(top==int_max){
            cout << "bolshe nelza!" << endl;
            continue;
         }
         cout << c;
         mas[top]=c-'0';
         top++;
      }
      if(c=='\b'){
         cout << '\b' << ' ' << '\b';
         top--;
      }
   }
   return top;
}
void main()
{
   using namespace std;
   int indigit[int_max];
   int outdigit[int_max];
   int i,n=0,top=0,st;
   cout << "vvedite chislo \n";
   top=vvodchisla(indigit);
   cout << "\nv kakuye stepen vozvodim?\n";
   cin >> st;
   cout << "\n+++++++++++\n";
   n=stepen(outdigit,n,indigit,top,st);
   for(i=0;i<n;i++)
      cout << outdigit[i];
   getch();
}
Ну что же вы, плиз уже из сил выбился с программированием этим думаю будет у меня проблема с созданием массива, я так понимаю что вся память в данном случае находится в 64кб на вершине или дне (ни знаю точно) памяти. Нада размещать его в другом месте?

Последний раз редактировалось Stilet; 29.07.2009 в 09:56.
centnew вне форума Ответить с цитированием
Старый 29.07.2009, 01:59   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну а чего вы хотите, огромные числа требуют огромного времени расчётов
По теме: Вы уходите за границы отведённой памяти, потому получаете AV, runtime error и т.д. Можете выделить больше памяти, только лучше из кучи, а не из стека(используйте new).
netrino вне форума Ответить с цитированием
Старый 31.07.2009, 00:48   #3
centnew
Новичок
Джуниор
 
Регистрация: 27.07.2009
Сообщений: 2
По умолчанию

netrino спасибо уже начал это понимать, но нет достаточного знания в этой сфере боюсь неполучится у меня, да и времени на изучение тожи нету, сейчас занимаюсь изучением *nix систем, как вы думаете в нынешнее время какие системы больше пользуются спросом в сфере программирования?
centnew вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Здрасте))выручайте)1ну прогу надо для отчета не могу ни как догнать:)помогите:) MrMorozko Помощь студентам 10 20.06.2009 20:54
Помогите решить 2 задачки срочно надо а то меня повешают на практике мне надо к 2 июня!!! серега222 Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2009 17:46
как следить за программой slavbase Свободное общение 4 21.03.2009 19:44
Как пользоватся второй программой xGroupers Общие вопросы Delphi 4 24.03.2008 17:58