Форум программистов, компьютерный форум CyberForum.ru

Печать квадрата из звездочек. Как сделать лучше? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
21.01.2010, 16:08     Печать квадрата из звездочек. Как сделать лучше? #1
Я написал программу, которая печатает из звездочек квадрат с заданной стороной. Например, квадрат со стороной 6 будет выглядеть так:
******
*____*
*____*
*____*
*____*
******
Код такой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<iostream>
using std::cout;
using std::cin;
 
#include<windows>
 
void rustext(char str[])
{
   char buffer[1024];
   CharToOem(str, buffer);
   cout << buffer;
}
 
void probel(int kolvoProbelov = 0)
{
   for (int j = 0; j < kolvoProbelov; j++)
   {
      cout << " ";
   }
}
 
int main()
{
   int storonaKvadrata = 0; // длина стороны квадрата
 
   rustext("Введите длину стороны квадрата (целое число, от 1 до 20)\n\r");
   cin >> storonaKvadrata;
 
   if (storonaKvadrata <= 20)
   {
      for (int i = 0; i < storonaKvadrata; i++)
      {
         cout << "*";
      }
 
      cout << "\n\r";
 
      for (int k = 0; k < (storonaKvadrata - 2); k++)
      {
         cout << "*";
         probel(storonaKvadrata - 2);
         cout << "*\n\r";
      }
 
      for (int i = 0; i < storonaKvadrata; i++)
      {
         cout << "*";
      }
 
      cout << "\n\r";
   }
   else
   {
      rustext("Введенное число превышает 20.\n\r");
   }
 
   system("pause");
   return 0;
}
Вопрос: есть ли лучшее решение задачи?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2010, 16:08     Печать квадрата из звездочек. Как сделать лучше?
Посмотрите здесь:

C++ Как лучше сделать.
Посоветуйте, как лучше сделать C++
C++ Как лучше это сделать?. а главное, как правильно? (Информационная система «Железнодорожный вокзал»)
break или как сделать лучше код C++
Площадь квадрата равна S. Вычислить сторону квадрата а, диагональ d и площадь S1 описанного около этого квадрата круга C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.01.2010, 16:23     Печать квадрата из звездочек. Как сделать лучше? #2
Не считаю лучшим. Просто как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main ()
{
    int storonaKvadrata = 0, i, j;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Ââåäèòå Г°Г*çìåð ñòîðîГ*Г» ГЄГўГ*äðГ*ГІГ*: "<< endl;
    cin>>storonaKvadrata;
    for(i=0; i<storonaKvadrata; i++)
    {
        for(j=0; j<storonaKvadrata; j++)
            if(i==0 || j==0 || i==storonaKvadrata-1 || j==storonaKvadrata-1)
                cout<<'*';
            else
                cout<<' ';
            cout<<endl;
    }
   
    return 0; 
}
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
22.01.2010, 14:52  [ТС]     Печать квадрата из звездочек. Как сделать лучше? #3
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
У меня это почему то не работает. Все равно крякозябры лезут.

Какой цикл включает код
C++
1
for(j=0; j<storonaKvadrata; j++)
Zn
Сообщений: n/a
16.08.2011, 14:07     Печать квадрата из звездочек. Как сделать лучше? #4
мой вариант (не факт, что лучший):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//программа печати квадрата с заданными сторонами
#include <iostream>
 
int main () {
    
    int side, n, m;
 
    using namespace std;
 
    cout<<"введите размер стороны квадрата: ";
    cin>>side;
//вывод верхней стороны
    n=1;
    while (n<=side) {
        cout<<"*";
        n++;
    }
    cout<<endl;
//вывод боковой стороны
    n=1;
    side=side-2;
 
    while (n<=side) {
        cout<<"*"; for (m=1; m<=side; m++) {
                cout<<" ";
               }
        cout<<"*\n";
        n++;
    }
//вывод нижней стороны
    n=1;
    side=side+2;
 
    while (n<=side) {
        cout<<"*";
        n++;
    }
    cout<<endl;
return 0;
}
Сыроежка
Заблокирован
16.08.2011, 17:01     Печать квадрата из звездочек. Как сделать лучше? #5
Цитата Сообщение от fs444 Посмотреть сообщение
Я написал программу, которая печатает из звездочек квадрат с заданной стороной. Например, квадрат со стороной 6 будет выглядеть так:
******
*____*
*____*
*____*
*____*
******
Код такой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<iostream>
using std::cout;
using std::cin;
 
#include<windows>
 
void rustext(char str[])
{
   char buffer[1024];
   CharToOem(str, buffer);
   cout << buffer;
}
 
void probel(int kolvoProbelov = 0)
{
   for (int j = 0; j < kolvoProbelov; j++)
   {
      cout << " ";
   }
}
 
int main()
{
   int storonaKvadrata = 0; // длина стороны квадрата
 
   rustext("Введите длину стороны квадрата (целое число, от 1 до 20)\n\r");
   cin >> storonaKvadrata;
 
   if (storonaKvadrata <= 20)
   {
      for (int i = 0; i < storonaKvadrata; i++)
      {
         cout << "*";
      }
 
      cout << "\n\r";
 
      for (int k = 0; k < (storonaKvadrata - 2); k++)
      {
         cout << "*";
         probel(storonaKvadrata - 2);
         cout << "*\n\r";
      }
 
      for (int i = 0; i < storonaKvadrata; i++)
      {
         cout << "*";
      }
 
      cout << "\n\r";
   }
   else
   {
      rustext("Введенное число превышает 20.\n\r");
   }
 
   system("pause");
   return 0;
}
Вопрос: есть ли лучшее решение задачи?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include   <iostream>
#include   <vector>
#include   <string>
 
 
int main()
{
   size_t n;
   std::cout >> "Enter 'n': ";
   std::cin >> n;
 
   std::vector<std::string> > v( n, std::string( n, '*' ) );
 
   std::copy( v.begin(), v.end(), std::ostream_iterator<std::string>( std::cout, "\n" ) );
}
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
16.08.2011, 17:05     Печать квадрата из звездочек. Как сделать лучше? #6
Цитата Сообщение от Сыроежка Посмотреть сообщение
2

#include <iostream>
#include <vector>
#include <string>
int main()
{
size_t n;
std::cout >> "Enter 'n': ";
std::cin >> n;
std::vector<std::string> > v( n, std::string( n, '*' ) );
std::copy( v.begin(), v.end(), std::ostream_iterator<std::string>( std::cout, "\n" ) );
}
этот вариант не делает то что нужно ТС, + он с ошибками
Сыроежка
Заблокирован
16.08.2011, 17:07     Печать квадрата из звездочек. Как сделать лучше? #7
Цитата Сообщение от PointsEqual Посмотреть сообщение
этот вариант не делает то что нужно ТС, + он с ошибками
Если есть ошиьки, то это скорей всего опечатки, так как я набирал текст "на коленках".

Но мне интересно другое, а что он не делает то, что нужно?! И какие в нем ошибки?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
16.08.2011, 17:09     Печать квадрата из звездочек. Как сделать лучше? #8
Цитата Сообщение от Сыроежка Посмотреть сообщение
Но мне интересно другое, а что он не делает то, что нужно?!
должен получится квадрат как в 1 посте, а не полностью из звездочек
Сыроежка
Заблокирован
16.08.2011, 17:16     Печать квадрата из звездочек. Как сделать лучше? #9
Цитата Сообщение от PointsEqual Посмотреть сообщение
должен получится квадрат как в 1 посте, а не полностью из звездочек
Спасибо, что подсказали. Я не обратил внимание на картинку, а думал, что нужно напечатать квадрат из звездочек.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2011, 19:34     Печать квадрата из звездочек. Как сделать лучше?
Еще ссылки по теме:

C++ Генератор квадрата из звездочек по заданным параметрам
Как сделать вывод чисел в виде квадрата? C++
Как лучше сделать иерархию классов? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.08.2011, 19:34     Печать квадрата из звездочек. Как сделать лучше? #10
Вот прикол ещё вывод с X-позиции квадрата.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
 
// left - это позиция по - Х для вывода квадрата
void square(short left, short size, char line, char ch) {
      for(short y = 0; y < size; y++) {
          for(short l = 0; l < left; l++) 
                cout.put(' ');
          for(short x = 0; x < size; x++) {
                if(! y || ! x || y == size - 1 || x == size - 1) 
                        cout.put(line);
                else
                        cout.put(ch);
          }
          cout.put('\n');
      }
}
 
int main(void) {
    short size = 17;
   //cin >> size;
    square(40, size, '*', '-');
    square(20, 7,    '#', '.');
    
    getchar();
    return 0;
}
Yandex
Объявления
16.08.2011, 19:34     Печать квадрата из звездочек. Как сделать лучше?
Ответ Создать тему
Опции темы

Текущее время: 15:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru