Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вычисление суммы сумм


Автор: pulsonq 19.11.2009, 16:56
Привет всем. Наколдовал я тут вот эту задачку

user posted image

но меня мучают сомнения, что сделал я что-то не правильно. Подскажите пожалуйста, что не так? или всё верно ?

Код

// 43.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
 double n,k,a,x,ai,xj,axi,y,yki,yk,yn;
 char cont;
 do
 {
 cout<<"x=";
 cin>>x;
 cin.get();

 cout<<"a=";
 cin>>a;
 cin.get();

 cout<<"n=";
 cin>>n;
 cin.get();

 cout<<"k=";
 cin>>k;
 cin.get();

 yk=0;
 y=0;

 cout<<setw(3)<<"n"<<setw(3)<<"k"<<setw(7)<<"ai"<<setw(7)<<"xj"<<setw(7)<<"axi"<<setw(15)<<"yk"<<setw(15)<<"y\n\n";

  for(int i=1;i<=n;)
  for(int j=1;j<=k;)
  {
   {
    xj=pow(x,j);
    ai=pow(a,i);
    axi=ai+xj;
    yk+=axi;
    y+=yk;

    i++;
    j++;
     
    cout<<setw(3)<<n<<setw(3)<<k<<setw(7)<<ai<<setw(7)<<xj<<setw(7)<<axi<<setw(15)<<yk<<setw(15)<<y<<endl;
   }
  }
    
 cout<<"For continue--<Enter>, for exit-- any symbol and <Enter> \n";

 cont=cin.get();
 
 } while (cont=='\n');

 return 0;
}

Автор: mes 19.11.2009, 17:42
Цитата(pulsonq @  19.11.2009,  15:56 Найти цитируемый пост)
  for(int i=1;i<=n;)
  for(int j=1;j<=k;)
  {
   {

две скобки это потому что два for ? тогда Вы ее поставили не в том месте.. хотя в данном случае на результат это не скажется..


Автор: pulsonq 19.11.2009, 17:50
Спасибо за ответ.
 тоесть будет так :
Цитата

for(int i=1;i<=n;)
{
  for(int j=1;j<=k;)
     {

А так всё остальное нормально ?

Автор: mes 19.11.2009, 18:19
Цитата(pulsonq @  19.11.2009,  16:50 Найти цитируемый пост)
А так всё остальное нормально ?

вот что еще бросилось в глаза:

инкрементацию цикла лучше делать в описании цикла, а не в теле, т.е так : 
Код

for(int i=1; i<=n; ++i)


Цитата(pulsonq @  19.11.2009,  15:56 Найти цитируемый пост)
double n,k,a,x,ai,xj,axi,y,yki,yk,yn;

переменные желательно объявлять локально по мере нужды, а не скопом.

Автор: Nadezda 20.11.2009, 11:23
Ошибка совершенно идиотская, поэтому не заметна

Код

i++;
j++;


У вас одновременно инкрементируются обе переменные, хотя они для разных циклов. Не удивительно, что не работает так как надо.

Автор: pulsonq 20.11.2009, 13:35
решил  smile 

Код

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    double n,k,a,x,ai,xj,yj,y,yn,yk;
    char cont;
    do
    {
    cout<<"x=";
    cin>>x;
    cin.get();

    cout<<"a=";
    cin>>a;
    cin.get();

    cout<<"n=";
    cin>>n;
    cin.get();

    cout<<"k=";
    cin>>k;
    cin.get();

    cout<<"\n\n";

    yk=0;
    yj=0;
    y=0;
    
    int i=1;
    
    for(i;i<=n;i++)
    {    
        cout<<"i="<<i<<endl;
        cout<<setw(3)<<"j"<<setw(5)<<"xj"<<setw(7)<<"yj"<<setw(9)<<"yk\n\n";
        for(int j=1;j<=k;j++)
            {
                
                xj=pow(x,j);
                ai=pow(a,i);
                yj=xj+ai;
                yk+=yj;
                
                                
                cout<<setw(3)<<j<<setw(5)<<xj<<setw(7)<<yj<<setw(7)<<yk<<endl<<endl;
                
            }
            yk=yk*i;
            cout<<"yn="<<yk<<endl<<endl;
            
            yn=yk*n;    
            yk=0;
    }
    
                
                            
    cout<<"For continue--<Enter>, for exit-- any symbol and <Enter> \n";

    cont=cin.get();
    
    } while (cont=='\n');

    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)