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


Автор: d52 1.4.2004, 21:50
Привет!!! Написал свою первую прогу. Пожалуйста посмотрите ее и скажите что где нитак.

Прога написана для интерполяции и выбора значений по таблице 72 СНиП "Стальные конструкции" . Столбик 0 это гибкость, а строка 0 это расчетное сопротивление стали. Найти нада фи.

Код

#include<iostream.h>
int main(){
cout<<"Table consist d52\n";
int ry, ly;
cout<<"\nlymbda = ";
cin>>ly;
cout<<"\nRy = ";
cin>>ry;

const int a=23, b=14; //??????? 72 ???? "???????? ???????????"
int mass[a][b]={
 {  0,200,240,280,320,360,400,440,480,520,560,600,640,650},
 { 10,988,987,985,984,983,982,981,980,979,978,977,977},
 { 20,967,962,959,955,952,949,946,943,941,938,936,934},
 { 30,939,931,924,917,911,905,900,895,891,887,883,879},
 { 40,906,894,883,873,863,854,846,839,832,825,820,814},
 { 50,869,852,836,822,809,796,785,775,764,746,729,712},
 { 60,827,805,785,766,749,721,696,672,650,628,608,588},
 { 70,782,754,724,687,654,623,595,568,542,518,494,470},
 { 80,734,686,641,602,566,532,501,471,442,414,386,359},
 { 90,665,612,565,522,483,447,413,380,349,326,305,287},
 {100,599,542,493,448,408,369,335,309,286,267,250,235},
 {110,537,478,427,381,338,306,280,258,239,223,209,197},
 {120,479,419,366,321,287,260,237,219,203,190,178,167},
 {140,376,315,272,240,215,195,178,164,153,143,134,126},
 {150,328,276,239,211,189,171,157,145,134,126,118,111},
 {160,290,244,212,187,167,152,139,129,120,112,105, 99},
 {170,259,218,189,167,150,136,125,115,107,100, 94, 89},
 {180,233,196,170,150,135,123,112,104, 97, 91, 85, 81},
 {190,210,177,154,136,122,111,102, 94, 88, 82, 77, 73},
 {200,191,161,140,124,111,101, 93, 86, 80, 75, 71, 67},
 {210,174,147,128,113,102, 93, 85, 79, 74, 69, 65, 62},
 {220,160,135,118,104, 94, 86, 77, 73, 68, 64, 60, 57},
 {230}};

for(int c=0; c<a; c++){         //????? ??????? 72 ???? ?? ???????
 for(int v=0; v<b; v++);
 
}

   int aa, ab;                       //?????? ???????? ?? ?????? 0
for(aa=1; ly>=mass[aa][0]; aa++);
while(ly<10){
  ab=1;
  goto metka1;              //??????? ?? ?????
 }
for(ab=1; ly>mass[ab][0]; ab++);
metka1:;                              //????? ???????? ?? ?????? 0

int ba, bb;                       //?????? ???????? ?? ?????? 0
for(ba=1; ry>=mass[0][ba]; ba++);
while(ry<200){
 bb=1;
 goto metka2;                  //??????? ?? ?????
}
   for(bb=1; ry>mass[0][bb]; bb++);
metka2:;                              //????? ???????? ?? ?????? 0

cout<<"\n lymbda do="<<mass[aa-1][0];
cout<<"\n lymbda="<<ly;
cout<<"\n lymbda po="<<mass[ab][0];

cout<<"\n\n Ry do="<<mass[0][ba-1];
cout<<"\n Ry="<<ry;
cout<<"\n Ry po="<<mass[0][bb];

int va, vb;
if(mass[0][bb]==mass[0][ba-1]){
 va=mass[aa-1][ba-1];
}
else va=(mass[aa-1][ba-1]*(ry-mass[0][ba-1])+mass[aa-1][bb]*(mass[0][bb]-ry))/(mass[0][bb]-mass[0][ba-1]);

if(mass[0][bb]==mass[0][ba-1]){
 vb=mass[ab][ba-1];
}
else vb=(mass[ab][ba-1]*(ry-mass[0][ba-1])+mass[ab][bb]*(mass[0][bb]-ry))/(mass[0][bb]-mass[0][ba-1]);

int x;
if(mass[aa-1][0]==mass[ab][0]){
 x=va;
}
else x=(va*(ly-mass[aa-1][0])+vb*(mass[ab][0]-ly))/(mass[ab][0]-mass[aa-1][0]);
cout<<"\n\n Otvet fi="<<x;
   
cout<<"\n\nend";
int z;
cin>>z;
return 0;
}

Автор: Artiom 1.4.2004, 22:29
Использование goto считается плохим стилем. Честно говоря программу не прочитал - тяжело читать без комментариев, но вместо goto лучше использовать break, continue, вызовы функций.

Автор: Coocky 1.4.2004, 22:54
Цитата
Использование goto считается плохим стилем

Это если много ,а парочку можно smile.gif Главное что б автор сам не путался,а на работу это не влияет wink.gif Сам иногда балуюсь biggrin.gif
Вообще-то мне формула неизвестна,но прога нормальная,вот только переменные можно обьявить в начале(если речь пошла о стиле biggrin.gif )
Ну можно еще и текст руссифицировать...

Автор: cardinal 1.4.2004, 23:01
1. ";" после меток не обязательна.
2.
Код
while(ly<10){
 ab=1;
 goto metka1;              //??????? ?? ?????
}

лучше так:
Код
if(ly<10){
 ab=1;
 goto metka1;              //??????? ?? ?????
}

3.
Код
while(ry<200){
bb=1;
goto metka2;                  //??????? ?? ?????
}

лучше так:
Код
if(ry<200){
bb=1;
goto metka2;                  //??????? ?? ?????
}

4. Все переменные я бы объявлял в самом верху.

А так для первой проги - неплохо!

Автор: Stalk 1.4.2004, 23:04
Цитата
текст русифицировать

Брррр. Не люблю, когда программу просят написать по-русскиsmile.gif Постоянно получается djn nfrfz atyz:)

Автор: Coocky 1.4.2004, 23:07
Цитата
Не люблю, когда программу просят написать по-русски Постоянно получается djn nfrfz atyz:)

А <windows.h> пользовался biggrin.gif

Автор: maxim1000 2.4.2004, 11:13
я бы еще посоветовал поработать над отступами
а то как-то почти все содержимое функции main получилось с самого края страницы
если когда функций несколько, это становится неудобно (по крайней мере, для меня)

Автор: Guest 2.4.2004, 13:32
с точки зрения читабельности - старауся писать функции
не длиннее 24 строк, включая заголовок
{1 экран}

а в обШем - молодец smile.gif

Автор: d52 2.4.2004, 15:52
Спасибо за коментарии. Я думал будет хуже(ну понятно).

Автор: srd 2.4.2004, 17:47
Цитата
Все переменные я бы объявлял в самом верху.

А смысл определять переменные в начале блока? Тяжкое наследие Си?

Автор: cardinal 2.4.2004, 19:39
Цитата
Тяжкое наследие Си?

Нет.

Смысл в том, что если захотел поменять название переменной, то ты ее сразу найдешь (в начале блока).
А во вторых если тебе переменная больше становится не нужной (после отладки например), то ты запросто можешь вообще забыть о том, что она была декларирована когда-то. Если написано что-то типа
Код
int x=0;

, то даже компилер ругаться не будет типа - unused variable.
Помоему это плохой стиль программирования - определять переменную тогда, когда она вдруг понадобилась, прямо там где понадобилась.

Автор: srd 2.4.2004, 20:55
Ну, на самом деле, когда я определяю переменную там, где она мне понадобилась, я пишу обычно что то вроде if (int i = ....) или double f = func(...), т.е. если этот код не нужен, то вместе с ним удаляются и ненужные переменные smile.gif Гораздо важнее следующее:
...
if (условние) {
Some_class a;
...
}
...
Конструктор для объекта a будет вызван только в том случае, если выполнится условие, а при выходе из блока будет немедленно вызван деструктор. Чем не аргумент в пользу определения переменных там, где они понадобились?

Автор: cardinal 2.4.2004, 21:16
А разве так нельзя:
Код
Some_class *a;

if (условние) {
a = new Some_class;
...
delete a;
}


Ну а вообще конечно аргумент, только для себя пока не решил, что это даст smile.gif.

Я говорил о простых переменных, которые у d52 встречались в коде.

Автор: d52 2.4.2004, 23:23
Цитата
Цитата 
Не люблю, когда программу просят написать по-русски Постоянно получается djn nfrfz atyz:) 

А <windows.h> пользовался

Попробовал добавить <windows.h> b и тем самым руссифицировать, но прога выдала закарючки.

Автор: chipset 3.4.2004, 08:44
эээ... ежели я правильно понял то тут надо локаль восемсот восемьдесят шестую поставить....
а вообще молодец wink.gif

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