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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Размер стороны квадрата, и печать звездочками 
:(
    Опции темы
freez
Дата 23.12.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди, помогите пожалуйста написать, ато не получается..

Цитата

Напишите программу, которая читает размер стороны квадрата и затем печатает звездочками и пробелами пустой квадрат заданного размера. Ваша программа должна работать для любых размеров, заданных в интервале 1-20. Например, если программа прочла размер 5, она должна напечатать:


*****
*      *
*      *
*      *
*****

Это сообщение отредактировал(а) alexeis1 - 23.12.2006, 14:16
PM MAIL ICQ   Вверх
Dov
Дата 23.12.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Код
#include <stdio.h>

int main()
{
    int size;
    int i, j;

    do
    {
        printf("Vvedite razmer storony kvadrata[1...20]: ");
        scanf("%d", &size);
    }while (size < 1 || size > 20);

    for(i = 1; i <= size; i++)
    {
        for(j = 1; j <= size; j++)
            printf("%c", i != 1 && i != size && j != 1 && j != size ? ' ' : '*');
        putchar('\n');
    }

    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Oleg_Ci
Дата 23.12.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



Другое решение
Код

#include <stdio.h>

int main(int argc, char *argv[])

    int size, i;
    char c1[] = "********************";
    char format1[7], format2[7];

    do{
        printf("Vvedite razmer storony kvadrata[1...20]: ");
        scanf("%d", &size);
    }while (size < 1 || size > 20);
    
    sprintf( format1, "%%.%is\n", size );
    sprintf( format2, "*%%%ic\n", size-1 );

    printf( format1, c1 );
    for( i=0; i<size-2; i++ )
        printf( format2, '*' );
    printf( format1, c1 );

    fflush(stdin);
    getchar(); // пауза
    return 0;
}

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


Новичок



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

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



А как решить эту задачу через <iostream.h> а не черех <stdio.h> ??
PM MAIL ICQ   Вверх
Dov
Дата 23.12.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(freez @  23.12.2006,  17:53 Найти цитируемый пост)
А как решить эту задачу через <iostream.h> а не черех <stdio.h> ??

Код
#include <iostream.h>

int main()
{
    int size;
    
    do
    {
        cout << "Vvedite razmer storony kvadrata[1...20]: ";
        cin  >> size;
    }while (size < 1 || size > 20);
    
    for(int i = 1; i <= size; i++)
    {
        for(int j = 1; j <= size; j++)
            cout << (i != 1 && i != size && j != 1 && j != size ? ' ' : '*');
        cout << endl;
    }

    return 0;
}




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 24.12.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Олег4, петросянишь?  smile  smile 
Ну, тогда, вот ещё:  smile  smile 
Код
#include <iostream.h>
int main()
{
    char str[20] = "";
    int  size;

    cout << "Vvedite razmer storony kvadrata[1...20]: ";
    cin  >> size;

    if(size > 20) size = 20;

    for(int i = 1; i <= size; i++)
        cout<<strncpy(str, i>1 && i<size ? "*                  " : "*******************",size-1)<<"*\n";
    
    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Oleg_Ci
Дата 25.12.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

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



Цитата(Dov @  24.12.2006,  23:38 Найти цитируемый пост)
cout<<strncpy

можно и без strncpy smile 
Код

for( int i=0; i<size; i++ )
cout.write( i>0 && i<size-1 ? "*                   " : "********************", size-1 ) << "*\n";

PM MAIL   Вверх
Romul3003
Дата 7.8.2011, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я вот тоже сижу и ломаю голову над этой задачей...

а как решить ее, используя только цикл while и операторы if... else ( можно условную операцию ( ? : ) ? до for и while...do еще не дошел, предполагается, что я их не знаю...

Это сообщение отредактировал(а) Romul3003 - 7.8.2011, 19:47
PM MAIL   Вверх
world
Дата 7.8.2011, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 2.10.2009
Где: Харьков

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



Элементарно, берём любой из приведенных выше алгоритмов (для примера возьму последний алгоритм Dov). И меняем цикл for на while

Код

#include <iostream.h>

int main()
{
    char str[20] = "";
    int  size;
    cout << "Vvedite razmer storony kvadrata[1...20]: ";
    cin  >> size;
    if(size > 20)
    {
        size = 20;
    }
    int i = 1;
    while(i <= size)
    {
        cout<<strncpy(str, i>1 && i<size ? "*                  " : "*******************",size-1)<<"*\n";
        i++;
    }
    return 0;
}


ЗЫ. Rodman, а не некропост ли это? Увы подзабыл правила форума на эту тему.
--------------------
Say what you mean, and mean what you say. Robert Wilson Cody
PM MAIL WWW ICQ Skype   Вверх
Silent
Дата 8.8.2011, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дайте я еще попетросяню, до кучи:
Код

#include <iostream>

void main()
{
    int n = -1, i = -1;;
    while ((n = (n > 0 && n < 22) ? n : -1)== -1) std::cin >> n;
    while (++i < n*n) std::cout << ((i % n == 0) ? "\n" : "") << (((i % n == 0) || (i % n == n-1) || (i < n) || (i > n*(n-1))) ? "*" : " ");
}

PM MAIL   Вверх
Dov
Дата 9.8.2011, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Silent @  8.8.2011,  12:09 Найти цитируемый пост)
Дайте я еще попетросяню, до кучи:

Конечно, мы только "ЗА".  smile 

Вот ещё...
Код
#include <windows.h>

#define TIMEOUT  500

void gotoxy(short x, short y)
{
    HANDLE    StdOut    = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD    coord    = {x, y};

    SetConsoleCursorPosition(StdOut, coord);
}

int main()
{
    srand((unsigned) time(NULL));

    bool    matr[21][21] = {0};
    int        size, count;    
    short    x, y;

    cout << "Enter the size of the square[1...20]: ";
    cin  >> size;

    if(size < 2)
        cout << '*' << endl;
    else
    {        
        if(size > 20)
            size = 20;

        count = size * size;

        while(count)
        {
            x = rand() % size;
            y = rand() % size + 1;

            if(matr[y][x] == false)
            {
                count--;
                matr[y][x] = true;
                gotoxy(x, y);
                putchar('*');
                Sleep(TIMEOUT / size);
            }
        }
        Sleep(TIMEOUT * 2);

        count = (size - 2) * (size - 2);
        while(count)
        {
            x = rand() % (size - 2) + 1;
            y = rand() % (size - 2) + 2;

            if(matr[y][x] == true)
            {
                count--;
                matr[y][x] = false;
                gotoxy(x, y);
                putchar(' ');
                Sleep(TIMEOUT / size);
            }
        }
    }
    gotoxy(0, size + 1);

    return 0;
}




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 10.8.2011, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



И ещё...

Код
#include <windows.h>

#define TIMEOUT  1000

void gotoxy(short x, short y)
{
    HANDLE    StdOut    = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD    coord    = {x, y};

    SetConsoleCursorPosition(StdOut, coord);
}

int main()
{    
    int        size;    
    short    x = -1, y = 1;
    
    cout << "Enter the size of the square[1...20]: ";
    cin  >> size;
    
    if(size < 2)
        cout << '*' << endl;
    else
    {
        if(size > 20)
            size = 20;        
        
        while(x < size - 1)
            gotoxy(++x, y), putchar('*'), Sleep(TIMEOUT / size);

        while(y < size)
            gotoxy(x, ++y), putchar('*'), Sleep(TIMEOUT / size);        

        while(x > 0)
            gotoxy(--x, y), putchar('*'), Sleep(TIMEOUT / size);            

        while(y > 2)
            gotoxy(x, --y), putchar('*'), Sleep(TIMEOUT / size);            
    }    
    gotoxy(0, size + 1);
    
    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
volatile
Дата 10.8.2011, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



В такой славной теме, грех не принять участие... smile 
Код

#include <windows.h>
void go ( int sx = 40, int sy = 20 )
{
   static HANDLE h_con = GetStdHandle ( STD_OUTPUT_HANDLE );
   static char c = ' ';
   c ^=' '^'*'; -- sx;
   int x  =  0, y  = -1;
   int dx =  0, dy =  1;
   while ( int i = (dx ? sx : sy) -- )
   {
      do {
         COORD coord = { x+=dx, y+=dy };
         SetConsoleCursorPosition ( h_con, coord );
         putchar ( c );
         Sleep ( 5 );
      } while ( -- i );
      dx += dy; dy -= dx; dx += dy;
   }
}
int main() { go (); go (); }


Это сообщение отредактировал(а) volatile - 10.8.2011, 01:07
PM MAIL   Вверх
DeMoNN
Дата 30.8.2011, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А формулой слабо? =)
Код

n = input()
print '*'*n + ('\n' + (n - 2)*('*' + ' ' * (n - 2) + '*\n') + '*'*n)*(n != 1)

Кто меньше?
PM MAIL ICQ   Вверх
Silent
Дата 31.8.2011, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще-то народ в плюсах строгает, не?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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