download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

помощ за c++

Автор
Съобщение
anonymous
Чет, 03.01.08, 17:17
здравейте искам да Ви помоля за помощ за една задача по C++
условието е следното : В едномерен масив са зададени разстоянията между градовете.Запълнете с тях двумерен масив.Отпечатайте го

операторите който сме учили са :cout,cin,if,do...while,while и for
моят вариант на програмата е :#include<iostream.h>
#include<iomanip.h>
void main()
{
int g[10];
int n;
do{cout<<"kolko sa gradovete ";
cin>>n;}while(n<=0||n>10);
int j;
for(j=0;j<=n-1;j++){cout<<"kolko e raztoianieto na "<<j<<" miasto ";
cin>>g[j];
}
int r[10][10];
int m,d;
for(m=0;m<=n-1;m++)
for(j=m;j<=n;j++)if(m==j)r[m][j]=0;
else {d=g[j];
r[m][j]=d;
r[j][m]=d;
}

for(m=0;m<n;m++)
{for(j=0;j<n;j++)
cout<<setw(10)<<r[m][j];
cout<<"\n";
}
}

и не мога да разбера каде бъркам
благодаря предварително

pdtomov
Чет, 03.01.08, 18:05
 
#include<iomanip.h>
int main()
{
int g[10];
int n;
do{cout<<"kolko sa gradovete ";
cin>>n;}while(n<=0||n>10);
int j;
for(j=0;j<=n-1;j++){cout<<"kolko e raztoianieto na "<<j<<" miasto ";
cin>>g[j];
}
int r[10][10];
int m,d;
for(m=0;m<=n-1;m++)
for(j=m;j<=n;j++)if(m==j)r[m][j]=0;
else {d=g[j];
r[m][j]=d;
r[j][m]=d;
}
 
for(m=0;m<n;m++)
{for(j=0;j<n;j++)
cout<<setw(10)<<r[m][j];
cout<<"n";
}
system("pause");
return 0;
}

main функцията трябва да е int main()!
За да видиш резултата трябва да поставиш накрая system("pause");
Промените съм ги направил в кода. Успех!

anonymous
Чет, 03.01.08, 18:25
функцията system("pause");
return 0;
не съм ги учил няма ли друг начин
а също така не мога да открия какви промени си направил
би ли бил по точен
благодаря
pdtomov
Чет, 03.01.08, 18:55
return 0; означава, че функцията не връща стойност.Може и без нея, но обикновено се поставя.
system("pause"); е системна функция която предотвратява затварянето на конзолният прозорец.
Променил съм void main() на int main() и съм поставил горните две функции.
Сега забелязах, ако използваш #include<iostream.h> cout<<setw(10)<<r[m][j]; трябва да стане cout<<" "<<r[m][j];
защото функцията setw я няма в iostream.h .
anonymous
Чет, 03.01.08, 19:31
Той използва и iomanip, където е setw.

При мен по този начин излезна търсения резултат. В условието не е казано как да са подредени разстоянията в двумерния масив, затова всички редове от масива ги направих еднакви за по-лесно. Това отдолу "cin>>ATB" съм го сложил, за да видя резултата, понеже не си спомням функцията. Успех.
#include<iostream.h>
#include<iomanip.h>
void main()
{
int g[10];
int n;
do{cout<<"kolko sa gradovete ";
cin>>n;}
while(n<=0||n>10);
int j;
for(j=0;j<=n-1;j++)
{
cout<<"kolko e raztoianieto na "<<j<<" miasto ";
cin>>g[j];
}
int r[10][10];
for(int i=0;i<=n-1;i++)
for(int m=0;m<=n-1;m++)
r[i][m]= g[i];
for(int d=0;d<n;d++)
{
cout<<"n";
for(int k=0;k<n;k++)
cout<<setw(10)<<r[d][k];
}
int ATB;
cin>>ATB;
}

anonymous
Чет, 03.01.08, 19:32
for(m=0;m<=n-1;m++)
for(j=m;j<=n;j++)if(m==j)r[m][j]=0;
else {d=g[j];
r[m][j]=d;
r[j][m]=d;
}
проблемът е в тои оператор
извежда ми матрицата но не ми извежда първата стойност а повтаря третата иначе ги подрежда както трябва но не ми извежда първата стойност в матрицата
ако да кажем разстоянията са 13 27 54 на мен ми извежда
0 27 54
27 0 54
54 54 0

а трябва да е
0 13 27
13 0 54
27 54 0

ще помоля още веднъж за помощ

pdtomov
Чет, 03.01.08, 21:43
Има проблем с условието! Матрицата дава разстоянието м/у два града, а тези разстояния не се дефинират точно при въвеждането на входните данни.

P.S. Видях, че си пуснал темата в bgdev и Kaldata. Там са ти обяснили някои неща!

редактиран от pdtomov на 03.01.08 22:15
anonymous
Чет, 03.01.08, 22:30
задачата пак не става
не мога да разбера каде бъркаме,пробвах какви ли не варянти
сещаш ли се още нещо ???
редактиран от anonymous на 03.01.08 22:44
pdtomov
Чет, 03.01.08, 23:50
Трябва да се въведат коректно входните данни. Например:
от гр.1 до гр.2 = 13 от 1 до 3 = 27 от 2 до 3 = 54 . които се вкарват така: r[1][2] = 13; r[1][3] = 27; r[2][3] = 54;
Както се вижда индексите в двумерния масив r са комбинация без повторение на n елемента от 2 ри клас, т.е. входните данни трябва да се вкарват с комбинация. Затова са се и замотали в bgdev.
anonymous
Пет, 04.01.08, 00:32

RE: помощ за c++

Пробвай да заместиш това:

” for(m=0;m<=n-1;m++)
for(j=m;j<=n;j++)if(m==j)r[m][j]=0;
else {d=g[j];
r[m][j]=d;
r[j][m]=d;
} „

с това:
int r[10][10];
int m,d;
for(m=0;m<=n-1;m++)
for(j=m;j<=n;j++)
if(m==0)
{
if(m==j)r[m][j]=0;
else
{
d=g[j-1];
r[m][j]=d;
r[j][m]=d;
}
}
else
{
if(m==j)r[m][j]=0;
else
{
d=g[j];
r[m][j]=d;
r[j][m]=d;
}
}

Матрицата с 3 числа се получава, точно както ти си казал в примера си. С четири се получава това:
0      13     27     54
13     0      54     67
27     54     0      67
54     67     67     0

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.