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

Вывод на экран ромба из звёзд! - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 57, средняя оценка - 4.88
egorikem
 Аватар для egorikem
7 / 7 / 1
Регистрация: 05.10.2010
Сообщений: 137
05.10.2010, 10:51     Вывод на экран ромба из звёзд! #1
Народ! Нам задали написать программу, которая выводит ромб из звёздочек, но что-то у меня не совсем получилось! Помогите в четверг сдавать!
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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;  
void drawOneLine(int nspaces, int nstars){
        int i;          
        for(i=0; i < nspaces; i++)
                putchar(' ');
        for(i=0; i < nstars; i++)
                putchar('*');
        putchar('\n');
}
void drawOneLine2(int nspaces2, int nstars2, int space3=0){
        int i;
        for (i=0; i<nspaces2; i++)
            putchar(' ');
        for (i=0; i<nstars2;i++)
            putchar('*');
        putchar('\n');
        space3++;
}
void main(){
        int q;
        cout<<"Enter osnova:";
        cin>>q;
        int LINES2= q;
        int LINES = q; 
        int nline;   
        int nline2;
        for(nline=1; nline <= LINES; nline++)
                drawOneLine(LINES - nline,   
                            nline*2 - 1
                            );
        for(nline2=q; nline2 <= LINES2; nline2--)
                drawOneLine2(LINES2 - nline2,   
                            nline2*2 - 2
                           );
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
05.10.2010, 10:56     Вывод на экран ромба из звёзд! #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
25
#include <stdio.h>
 
#define XSIZ 5
#define YSIZ 5
 
int main()
{
    int i = 0;
    int j = 0;
    
    char shape[XSIZ][YSIZ] =  { "  *  ",
                                " * * ",
                                "*   *",
                                " * * ",
                                "  *  " 
    };
    
    for(i = 0; i < XSIZ; ++i) {
        for(j = 0; j < YSIZ; ++j)
            printf("%c", shape[i][j]);
        printf("\n");
    }
    
    return 0;
}
egorikem
 Аватар для egorikem
7 / 7 / 1
Регистрация: 05.10.2010
Сообщений: 137
05.10.2010, 11:26  [ТС]     Вывод на экран ромба из звёзд! #3
Мужик! Спасибо! Но нужно изначально вводить размер стороны ромба и на твой код ругается "переполнение массива"!
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
05.10.2010, 13:51     Вывод на экран ромба из звёзд! #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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream.h>
 
void romb1(int n)
{
    int m,i,j;
    m=n/2;
    for(i=0;i<m;i++)
    {
    for (j=0; j<n; j++)
    {
        if (j==m+i||j==m-i)
            cout<<'*';
        else cout<<' ';
    }
    cout<<endl;
    }
 
    for(i=m;i<n;i++)
    {
    for (j=0; j<n; j++)
    {
        if (j==m+n-i-1||j==i-m)
            cout<<'*';
        else cout<<' ';
    }
    cout<<endl;
    }
}
void romb2(int n)
{
    int m,i,j;
    m=n/2;
    for(i=0;i<m;i++)
    {
    for (j=0; j<n; j++)
    {
        if (j<=m+i&&j>=m-i)
            cout<<'*';
        else cout<<' ';
    }
    cout<<endl;
    }
 
    for(i=m;i<n;i++)
    {
    for (j=0; j<n; j++)
    {
        if (j<=m+n-i-1&&j>=i-m)
            cout<<'*';
        else cout<<' ';
    }
    cout<<endl;
    }
}
int main()
{
int n,r;
cout<<"Vvedite razmer: ";   // r - сторона ромба
cin>>r;
n=r*2-1;            // n - высота=ширина
 
romb1(n);
cout<<endl;
romb2(n);
 
/////
cout<<endl;
system("pause");
return 0;
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
05.10.2010, 15:18     Вывод на экран ромба из звёзд! #5
Цитата Сообщение от egorikem Посмотреть сообщение
Но нужно изначально вводить размер стороны ромба
Вообще это я к тому, что любую фигуру адекватнее всего хранить в массиве. Изначально вводить размеры? Динамическая память в помощь. Заполнить массив для квадрата - элементарно. Перевернуть его на 90 градусов тоже.
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
05.10.2010, 15:46     Вывод на экран ромба из звёзд! #6
я тут половину ромба нарисовал, вторую половину сам дорисуешь

Не знаю почему, но в примере fasked массив должен быть 6х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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int N; cin >> N;
    char spaces[] = "                    ";
    char  shape [20];
    int margine = N-1; int asterN = 1;
    // ****************рисуем первую звездочку****************
     strncpy(shape,spaces,margine); shape[N-1] = '\0';
     strcat(shape,"*");  shape[N] = '\0';
     strncat(shape,spaces,margine); shape[N*2-1] = '\0';
     cout << shape << endl ;
//**************************************************************
 
     int middle = 1;
     while(margine)
     {
     strncpy(shape,spaces,margine-1); shape[margine-1] = '\0';
strcat(shape,"*");  shape[N] = '\0';
strncat(shape,spaces,middle); shape[N+middle] = '\0';
strcat(shape,"*");  shape[N+middle+1] = '\0';
strncat(shape,spaces,margine-1); shape[N*2-1] = '\0';
     cout << shape << endl;
     margine--;
     middle += 2;
     }  
    system("pause");
}
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
05.10.2010, 16:12     Вывод на экран ромба из звёзд! #7
Цитата Сообщение от NikolaWhite Посмотреть сообщение
Не знаю почему, но в примере fasked массив должен быть 6х6, тогда не будет переполнения
Достаточно будет 5x6, чтобы влез нуль-символ для каждой строки.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
05.10.2010, 16:18     Вывод на экран ромба из звёзд! #8
Цитата Сообщение от NikolaWhite Посмотреть сообщение
Не знаю почему, но в примере fasked массив должен быть 6х6, тогда не будет переполнения
Видимо, потому, что инициализируется он строками, за каждой из которых символ '\0' неявно присутствует. 5 х 6 размера достаточно, если будет 6 х 6 - последняя строка просто нулями заполнится...
egorikem
 Аватар для egorikem
7 / 7 / 1
Регистрация: 05.10.2010
Сообщений: 137
05.10.2010, 22:54  [ТС]     Вывод на экран ромба из звёзд! #9
Мужик! Но равнобедренный треугольник (половина ромба) проще:
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
#include <stdio.h>
#include <iostream>
using namespace std;  
void drawOneLine(int nspaces, int nstars){
        int i;          
        for(i=0; i < nspaces; i++)
                putchar(' ');
        for(i=0; i < nstars; i++)
                putchar('*');
        putchar('\n');
}
void main(){
        int q;
        cout<<"Enter osnova:";
        cin>>q;
        int LINES = q; 
        int nline;      
        for(nline=1; nline <= LINES; nline++)
                drawOneLine(LINES - nline,   
                            nline*2 - 1      
                           );
        char ch;
        do
        {
 
        cin>>ch;
        }while(ch!='c');
}
Но все равно всем большое спасибо!

Добавлено через 3 минуты
Народ! Простите за дибилизм а как сделать вот так:
*
*:*
*
Тоесть ввёл размер он нарисовал, но внутри все, кроме двух крайних звезд, другие знаки?!

Добавлено через 1 час 49 минут
Народ всем большое спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2015, 18:44     Вывод на экран ромба из звёзд!
Еще ссылки по теме:

Вывод на экран чётных слов строки исправить на вывод нечётных слов C++
Графика, перемещение ромба C++
C++ Наследование ромба от квадрата

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

Или воспользуйтесь поиском по форуму:
mastic
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 3
14.07.2015, 18:44     Вывод на экран ромба из звёзд! #10
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
#include "stdafx.h"
#include<iostream>
 
using namespace std;
 
 
void main()
{
    char r = '*';
    char p = ' ';
    int n=7;
    cout << "enter size" << endl;
    cin >> n;
    cout << endl;
    int z = 1;
    for (int i = 0; i < n / 2 + 1; i++)
    {
        int prob = (n - z) / 2;
        for (int j = 0; j < prob; j++)
            cout << p;
        for (int k = 0; k < z; k++)
            cout << r;
        cout << endl;
 
 
        z = z + 2;
    }
    z = n-2;
    //===
    for (int i = n/2; i > 0; i--)
    {
        int prob = (n - z) / 2;
        for (int j = 0; j < prob; j++)
            cout << p;
        for (int k = 0; k < z; k++)
            cout << r;
        cout << endl;
        z = z - 2;
    }
 
    system("pause");
}
Yandex
Объявления
14.07.2015, 18:44     Вывод на экран ромба из звёзд!
Ответ Создать тему
Опции темы

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