Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Размер стороны квадрата


Автор: freez 23.12.2006, 14:03
Люди, помогите пожалуйста написать, ато не получается..

Цитата

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


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

Автор: Dov 23.12.2006, 15:13
Код
#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;
}

Автор: Oleg_Ci 23.12.2006, 17:35
Другое решение
Код

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

Автор: freez 23.12.2006, 18:53
А как решить эту задачу через <iostream.h> а не черех <stdio.h> ??

Автор: Dov 23.12.2006, 19:14
Цитата(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;
}


Автор: Dov 24.12.2006, 20:38
Олег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;
}

Автор: Oleg_Ci 25.12.2006, 17:56
Цитата(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";

Автор: Romul3003 7.8.2011, 19:47
я вот тоже сижу и ломаю голову над этой задачей...

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

Автор: world 7.8.2011, 22:05
Элементарно, берём любой из приведенных выше алгоритмов (для примера возьму последний алгоритм 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, а не некропост ли это? Увы подзабыл правила форума на эту тему.

Автор: Silent 8.8.2011, 12:09
Дайте я еще попетросяню, до кучи:
Код

#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))) ? "*" : " ");
}

Автор: Dov 9.8.2011, 23:28
Цитата(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;
}


Автор: Dov 10.8.2011, 00:23
И ещё...

Код
#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;
}

Автор: volatile 10.8.2011, 00:36
В такой славной теме, грех не принять участие... 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 (); }

Автор: DeMoNN 30.8.2011, 19:19
А формулой слабо? =)
Код

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

Кто меньше?

Автор: Silent 31.8.2011, 17:37
Вообще-то народ в плюсах строгает, не?

Автор: Dariaaa 13.8.2014, 03:01
Код

#include <iostream>
using namespace std;

int main() {
    int n;
    int m = 1;
    int z = 1;
    int x = 1;
    int d;
    int r = 1;
    
    cout << "Enter num for n: ";
    cin >> n;
    
    while(m <= n){
        r = 1;
        d = m;
        if (m == 1){
            while(z <= n){
                cout << "*";    
                z += 1;        
        }cout << "\n";
        }
        
        if ((m != 1) && (m != n) && (d == m)){
            cout << "*";
            while (r <= n-2){
                cout << " ";
                r += 1;
            }
            cout << "*" << "\n";
        }
        
        if (m == n){
            while(x <= n){
            cout << "*";
            x += 1;
        }
        }
        m+=1;
    }
    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)