геометрия — C ++ Loop (треугольник-ящик)

я не могу заставить мою программу работать, я попробовал это уже с маркерами (goto).
но я не могу заставить его работать. Я также пытался улучшить цикл, но он заканчивается бесконечным циклом. Спасибо за помощь!

#include <iostream> //includes
using namespace std;
int makedreieck(int länge) // function for drawing a triangle
{
int rows=0; //rows
int draw=0; //drawed
while(draw <= länge)
{
draw++;
cout << "*";
if(draw == länge-1)
{
rows++;
draw = länge-rows;
cout << endl;
}
if(draw == 1)
{
getchar();
return 0;
}
}
}

int main(char argument)
{
int dreieck;
cin >> dreieck;
makedreieck(dreieck);
getchar();
return 0;
}

наконец-то все заработало … если кому-то нужен код:

#include <iostream>
#include <time.h>
#include <windows.h>
#include <tchar.h>
using namespace std;

int createtriangle(int length, bool custom, char symbol)
{
clock_t start, finish;
length++;
int OK=0;
int OK_ABORT;
int TRIANGLE_NOT_ALLOWED;
enum returnvalues{OK, OK_ABORT, TRIANGLE_NOT_ALLOWED};
if(length<=0)
{
cerr << "Dreieck mit einer Laenge von " << length-1 <<" unerlaubt.";
return TRIANGLE_NOT_ALLOWED;
}
if(length>81)
{
cout << "Es wurde eine ueber 80 Sternchen lange Treppe entdeckt." << endl << "Es wird empfohlen die Operation abzubrechen"<< endl << "1: abbrechen 2: weiter"<<endl<<"Auswahl: ";
int sel;
cin >> sel;
getchar();
if(sel>2)
{
cout << "Es gibt die Auswahl: "<<sel<<" nicht.";
}
system("cls");
switch(sel)
{
case 1:
return OK_ABORT;
break;
case 2:
break;
}
}
int rows=0;
int draw=0;
start = clock();
while(draw <= length)
{
draw++;
if(rows>=1&&custom==false)
{
cout << "*";
}
if(rows>=1&&custom==true)
{
cout << symbol;
}

if(draw == length)
{
if(rows>=1)
{
cout << endl;
}
rows++;
draw = length-rows;
}
if(rows == length)
{
finish=clock();
if(custom==false)
{
cout << "Es wurde eine "<<length-1<<" Sternchen lange Treppe gebaut."<<endl;
}
else if(custom==true)
{
cout << "Es wurde eine "<<length-1<<" "<<symbol<<" lange Treppe gebaut."<<endl;
}
cout << "Es wurden "<< static_cast<double>( finish - start ) /CLOCKS_PER_SEC<< " Sekunden gebraucht.";
return OK;
}
}
return OK;
}
int main()
{
START:
system("cls");
int dreieck;
char time[9];
cout << "Wie gross soll die Treppe sein?: ";
cin >> dreieck;
system("cls");
cout << "Soll ein custom symbol verwendet werden?"<<endl<<"Ja:1 Nein:2"<<endl<<"Auswahl: ";
int menu2;
cin >> menu2;
system("cls");
bool customtrue;
char symbolcustom;
if(menu2>2)
{
cout << "Die Auswahl: " << menu2 << " ist nicht verfügbar";
getchar();
goto START;
}
switch(menu2)
{
case 1:
customtrue = true;
cout << "Symbol angeben(1Char max): ";
cin >> symbolcustom;
break;
case 2:
customtrue = false;
break;
}
system("cls");
createtriangle(dreieck,customtrue,symbolcustom);
getchar();
getchar();
menumark:
system("cls");
cout << "Soll erneut eine Treppe gebaut werden?"<<endl<<"1: Ja 2: Nein"<<endl<<"Auswahl: ";
int menu;
cin >> menu;
if(menu>2)
{
cout <<"Es gibt keine "<<menu<<" Auswahl.";
getchar();
goto menumark;
}
switch(menu)
{
case 1:
goto START;
break;
case 2:
exit(0);
break;
}
return 0;
}

-2

Решение

Используя ваш исходный код …

#include <iostream> //includes
using namespace std;
int makedreieck(int länge) // function for drawing a triangle
{
int rows=0; //rows
int draw=0; //drawed
while(draw <= länge)
{
draw++;
cout << "*";
if(draw == länge-1)
{
rows++;
draw = länge-rows;
cout << endl;
}
if(draw == 1)
{
getchar();
return 0;
}
}
}

int main(char argument)
{
int dreieck;
cin >> dreieck;
makedreieck(dreieck);
getchar();
return 0;
}

первые несколько ошибок компиляции с g ++,…

[D: \ DEV \ тест]
> gnuc foo.cpp
foo.cpp: 3: 1: ошибка: отклонение '\ 344' в программе
foo.cpp: 7: 5: ошибка: отклонение '\ 344' в программе
foo.cpp: 11: 9: ошибка: отклонение '\ 344' в программе
foo.cpp: 14: 13: ошибка: отклонение '\ 344' в программе
foo.cpp: 3: 23: ошибка: ожидается ',' или '...' перед 'nge'
foo.cpp: в функции 'int makedreieck (int)':
foo.cpp: 7: 21: ошибка: ожидается ')' перед 'nge'
foo.cpp: 7: 21: ошибка: 'nge' не был объявлен в этой области
foo.cpp: 7: 24: ошибка: ожидается ';' перед знаком ")"
foo.cpp: 5: 9: предупреждение: неиспользуемая переменная 'lines' [-Wunused-variable]
foo.cpp: 32: 1: ошибка: ожидается '}' в конце ввода
foo.cpp: 32: 1: предупреждение: нет оператора возврата в функции, возвращающей не void [-Wreturn-type]

[D: \ DEV \ тест]
> _

из-за того, что компилятор MingW g ++ для Windows не соответствует стандарту C ++ относительно набора символов, принятого в идентификаторах. Определенные числа символов, представленные в отчете, немного странные, поскольку исходный код был сохранен как Windows ANSI Western, но g ++ также допускает ошибку с исходным кодом как UTF-8. По состоянию на 2013 несколько компиляторов в соответствии с исходный набор символов.

Единственные безопасные символы — от A до Z, подчеркивание и цифры от 0 до 9.

На практике это означает: напиши свой исходник на английском, лингва франка разработки программного обеспечения, а затем может поддерживаться другими и компилироваться другими компиляторами.

После исправления я получаю следующие ошибки компиляции:

[D: \ DEV \ тест]
> gnuc foo.cpp
foo.cpp: в функции 'int makedreieck (int)':
foo.cpp: 19: 21: ошибка: 'getchar' не был объявлен в этой области
foo.cpp: в глобальном масштабе:
foo.cpp: 25: 5: предупреждение: первый аргумент 'int main (char)' должен быть 'int' [-Wmain]
foo.cpp: 25: 5: предупреждение: 'int main (char)' принимает только ноль или два аргумента [-Wmain]
foo.cpp: в функции 'int main (char)':
foo.cpp: 30: 13: ошибка: 'getchar' не был объявлен в этой области
foo.cpp: в функции 'int makedreieck (int)':
foo.cpp: 23: 1: предупреждение: управление достигает конца не пустой функции [-Wreturn-type]

[D: \ DEV \ тест]
> _

Ошибки здесь из-за не включая заголовок <stdio.h> что объявляет getchar функция.

После исправления ошибок больше не сообщается.

Тем не менее, предупреждения серьезны:

[D: \ DEV \ тест]
> gnuc foo.cpp
foo.cpp: 27: 5: предупреждение: первый аргумент 'int main (char)' должен быть 'int' [-Wmain
foo.cpp: 27: 5: предупреждение: 'int main (char)' принимает только ноль или два аргумента [-Wmain]
foo.cpp: в функции 'int makedreieck (int)':
foo.cpp: 25: 1: предупреждение: управление достигает конца не пустой функции [-Wreturn-type]

[D: \ DEV \ тест]
> _

Нестандартный main подпись означает, что даже после включения требуемого заголовка это не действителен C ++.

Просто удалите (неиспользованный) формальный аргумент.

Затем код компилируется, остается только одно очень серьезное предупреждение:

[D: \ DEV \ тест]
> gnuc foo.cpp
foo.cpp: в функции 'int makedreieck (int)':
foo.cpp: 25: 1: предупреждение: управление достигает конца не пустой функции [-Wreturn-type]

[D: \ DEV \ тест]
> _

Который абсолютно необходимо исправить!

Подводя итог:

  • Измените код, чтобы не использовать неанглийские буквы в идентификаторах. Эти национальные символы в порядке. стандарт C ++, но немногие компиляторы поддерживают их. В частности g ++ не делает.

  • Включите все необходимые заголовки.

  • Используйте стандартную подпись для main,

И не забудьте исправить недостающее return вещь утверждения

затем Вы можете начать отладку!

2

Другие решения

На первой итерации вы устанавливаете draw до 1, так (draw == 1) это правда, и функция возвращает.

Попробуйте уменьшить länge вместо draw когда draw == länge-1, сброс draw до 0 в этой точке и выйти в конце цикла, когда länge == 1, Отрегулируйте по вкусу.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector