Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2010, 21:15   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Широкий диапазон форм

У Дейтлов есть задача
Цитата:
Используйте подход, развитый в упражнениях 3.22 и 3.23, для создания программы, которая вычерчивает широкий диапазон форм.
В 3.22 печатался квадрат из звездочек
****
****
****
****

В 3.23 - такой же квадрат, но из произвольных символов с помощью fillCharacter.

Что в задаче следует понимать под широким диапазоном форм? Треугольники, прямоугольники и т.п.?
fs444 вне форума Ответить с цитированием
Старый 17.03.2010, 21:22   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Треугольники, прямоугольники и т.п.?
Видимо, да. Фигура делится на горизонтальные полоски, ширина каждой полоски вычисляется в зависимости от типа фигуры, и полоска рисуется с помощью этого fillCharacter, если я, конечно, правильно понял, что он из себя представляет.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 24.03.2010, 20:19   #3
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
полоска рисуется с помощью этого fillCharacter, если я, конечно, правильно понял, что он из себя представляет
Это получается, что если в fillCharacter будет "*", фигура будет состоять из звезд. Если из "$", то из долларов, да?

И предполагается, что тип фигуры будет случайно определяться что-ли? При одном вызове программы треугльник, при другом - ромб, при третьем - квадрат, так что ли?
fs444 вне форума Ответить с цитированием
Старый 24.03.2010, 21:19   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Это получается, что если в fillCharacter будет "*", фигура будет состоять из звезд. Если из "$", то из долларов, да?
Как я понимаю все это - да.
Цитата:
И предполагается, что тип фигуры будет случайно определяться что-ли?
Не обязательно. Можно спрашивать пользователя что рисовать, можно по очереди нарисовать несколько разных. Конкретный способ демонстрации возможностей программы тут непринципиальна.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 27.03.2010, 22:04   #5
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
Цитата:
И предполагается, что тип фигуры будет случайно определяться что-ли?
Не обязательно. Можно спрашивать пользователя что рисовать, можно по очереди нарисовать несколько разных. Конкретный способ демонстрации возможностей программы тут непринципиальна.
Понятно. Спасибо.
fs444 вне форума Ответить с цитированием
Старый 30.03.2010, 16:17   #6
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Код:
#include<iostream>
using namespace std;

#include<windows>

void kvadrat(int storona, char fillCharacter); //печать квадрата
void treugolnik(int storona, char fillCharacter);//печать треугольника
void romb(int storona, char fillCharacter);//печать ромба

int main()
{
   int storona; //значение стороны квадрата, треугольника или ромба. В.п.
   int nFiguri; //номер фигуры. В.п.
   char fillCharacter; //символ, которым будет печататься фигура

   cout << "kvadrat - 1; treugolnik - 2; romb - 3" << endl;
   cout << "Chto pechataem: ";
   cin >> nFiguri;
   cout << "Chem pechataem: ";
   cin >> fillCharacter;

   switch(nFiguri)
   {
      case 1:
         cout << "Vvedite dlinu storoni figuri: ";
         cin >> storona;
         kvadrat(storona, fillCharacter);
         break;

      case 2:
         cout << "Vvedite dlinu storoni figuri: ";
         cin >> storona;
         treugolnik(storona, fillCharacter);
         break;

      case 3:
         cout << "Vvedite dlinu storoni figuri: ";
         cin >> storona;
         romb(storona, fillCharacter);
         break;

      default:
         cout << "ERROR!!!" << endl;
         break;
   }

   system("pause");
   return 0;
}

//Квадрат
void kvadrat(int storona, char fillCharacter)
{
   for (int i = 1; i <= storona; i++)
   {
      for (int j = 1; j <= storona; j++)
      {
         cout << fillCharacter;
      }

      cout << endl;
   }
}

//Треугольник
void treugolnik(int storona, char fillCharacter)
//storona - сторона треугольника. В.п.
{
   int otstup = (storona / 2) + 2; //отступ от левого края окна до фигуры

   int kolvoProbDoSimv; //кол-во пробелов до символов
   int kolvoSimv = 1; //кол-во символов

   // вычисляем кол-во пробелов до символов
   kolvoProbDoSimv = (storona / 2) - 1;

   //начинаем печатать треугольник
   for (int i = 1; i <= storona; i++)
   {
      //печатаем отступ
      for (int l = 1; l <= otstup; l++)
      {
         cout << " ";
      }

      //печатаем пробелы до символов
      for (int j = 1; j <= kolvoProbDoSimv; j++)
      {
         cout << " ";
      }

      --kolvoProbDoSimv;

      //печатаем символы
      for (int k = 1; k <= kolvoSimv; k++)
      {
         cout << fillCharacter;
      }

      cout << endl;

      ++kolvoSimv;
   }
}

//Ромб
void romb(int storona, char fillCharacter)
{
   //сначала печатаем верхнюю часть ромба, т.е. треугольник

   int otstup = (storona / 2) + 2; //отступ от левого края окна до фигуры

   int kolvoProbDoSimv; //кол-во пробелов до символов
   int kolvoSimv = 1; //кол-во символов

   // вычисляем кол-во пробелов до символов
   kolvoProbDoSimv = (storona / 2) - 1;

   //начинаем печатать треугольник
   for (int i = 1; i <= storona; i++)
   {
      //печатаем отступ
      for (int l = 1; l <= otstup; l++)
      {
         cout << " ";
      }

      //печатаем пробелы до символов
      for (int j = 1; j <= kolvoProbDoSimv; j++)
      {
         cout << " ";
      }

      --kolvoProbDoSimv;

      //печатаем символы
      for (int k = 1; k <= kolvoSimv; k++)
      {
         cout << fillCharacter;
      }

      cout << endl;

      ++kolvoSimv;
   }

   //теперь допечатываем к треугольнику нижнюю часть

   kolvoProbDoSimv = 1;
   kolvoSimv = storona - 2;

   for (int i = 1; i <= (storona - 1); i++)
   {
      //печатаем отступ
      for (int l = 1; l <= otstup; l++)
      {
         cout << " ";
      }

      for (int j = 1; j <= kolvoProbDoSimv; j++)
      {
         cout << " ";
      }

      for (int k = 1; k <= kolvoSimv; k++)
      {
         cout << fillCharacter;
      }

      cout << endl;

      --kolvoProbDoSimv;
      --kolvoSimv;
   }
}
Только из-за того, что символы могут находится только четко друг под другом, фигуры получаются кривые. Что делать?
fs444 вне форума Ответить с цитированием
Старый 30.03.2010, 21:17   #7
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Что делать?
Радоваться тому, что есть.
Или вы думаете, что тут еще что-то можно сделать?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 31.03.2010, 19:28   #8
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
Или вы думаете, что тут еще что-то можно сделать?
Не знаю, потому и спрашиваю.
fs444 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
открыть диапазон segail Microsoft Office Excel 2 21.09.2009 17:37
"широкий" DBGrid chekanoff Компоненты Delphi 0 16.09.2009 01:29
Диапазон limon Помощь студентам 5 06.09.2008 21:44
Как написать в коде чтобы диапазон А копировался как значение в диапазон В. Dorvir Microsoft Office Excel 12 23.05.2008 22:11
диапазон времени chekanoff БД в Delphi 34 02.03.2008 01:28