Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать квадрата из звездочек. Как сделать лучше? 
:(
    Опции темы
Mastodont
Дата 21.1.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



Я написал программу, которая печатает из звездочек квадрат с заданной стороной. Например, квадрат со стороной 6 будет выглядеть так:
******
*        *
*        *
*        *
*        *
******
Код  такой:
Код

#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;
}

Вопрос: есть ли лучшее решение задачи?
PM MAIL   Вверх
bsa
Дата 21.1.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
#include <clocale>
#include <iostream>
#include <iomanip>

int main()
{
   std::setlocale(LC_ALL, "");
   int size;
   for(;;) {
      std::cout << "Введите ширину квадрата: " << std::flush;
      if (! (std::cin >> size) ) {
         std::cerr << "Недопустимое значение" << std::endl;
         return 1;
      }
      if (size >= 2)
         break;
      else
         std::cerr << "Неверная ширина, допустимы только положительные значения не меньшие 2-х" << std::endl;
   }
   std::cout << std::setw(size) << std::setfill('*') << '*' << '\n';
   for(int i = 2; i < size; ++i)
      std::cout << std::setw(1) << '*' << std::setw(size-1) << std::setfill(' ') << '*' << '\n';
   std::cout << std::setw(size) << std::setfill('*') << '*' << std::endl;
   return 0;
}

PM   Вверх
mes
Дата 21.1.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



вот еще примерчик - мож что пригодится отсюда..
Код

std::ostream& draw_boxline (std::ostream&  out, char left, char mid, char right, unsigned len)
{
                  out << left;
    while (len--) out << mid;
                  out << right;

    return out;
}
std::ostream& draw_box (std::ostream&  out,const char c[3][3], unsigned width, unsigned height)
{
                     draw_boxline (out, c[0][0], c[0][1], c[0][2], width) << std::endl;
    while (height--) draw_boxline (out, c[1][0], c[1][1], c[1][2], width) << std::endl;
                     draw_boxline (out, c[2][0], c[2][1], c[2][2], width) << std::endl;
    return out;
}

const char std_box[][3] = { { '*', '-', '*' },
                            { '|', ' ', '|' },
                            { '*', '-', '*' } };

int main ()
{
      draw_box (std::cout, std_box, 15,10);
}




--------------------
PM MAIL WWW   Вверх
Mastodont
Дата 22.1.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



Спасибо, буду разбираться =)
PM MAIL   Вверх
volery
Дата 25.4.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.4.2010

Репутация: нет
Всего: нет



А как это можно сделать через оператор goto?
PM MAIL   Вверх
bsa
Дата 25.4.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(volery @  25.4.2010,  16:16 Найти цитируемый пост)
А как это можно сделать через оператор goto? 
никак. этот оператор не имеет отношения в выводу на экран. Да и новичкам им пользоваться противопоказано.

PM   Вверх
volery
Дата 25.4.2010, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 2.4.2010

Репутация: нет
Всего: нет



Такого неможет быть!!!
Я сделал что просто выводит такой квадрат. Но незнаю как сделать что бы выводил с заданнным числом звёздочек...
PM MAIL   Вверх
bsa
Дата 26.4.2010, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(volery @  25.4.2010,  18:45 Найти цитируемый пост)
Такого неможет быть!!!
это есть:
Код
int main()
{
   goto label;
   //some code
label:
   //some code
   return 0;
}
Что-то похожее на вывод на экран ты видишь?

PM   Вверх
xvr
Дата 26.4.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(bsa @ 25.4.2010,  18:26)
Цитата(volery @  25.4.2010,  16:16 Найти цитируемый пост)
А как это можно сделать через оператор goto? 
никак. этот оператор не имеет отношения в выводу на экран. Да и новичкам им пользоваться противопоказано.

В порядке телепатии - под 'оператором goto' понимается функция gotoxy из BC 3.1
2 volery - я угадал?  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.