Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
JKman
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 16
1

Трудности при написании программы

01.10.2018, 15:16. Просмотров 919. Ответов 8

Здравствуйте. Разбирал циклы for, while и do while, принцип их работы я понял, но меня поставила в ступор одна задачка связанная с ними : Распечатать на экране монитора таблицу символов, используя только циклы (без использования массивов, строк или других типов данных кроме литерного типа)
Таблица с использованием цикла for выглядит так:
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 <stdio.h>
#include <windows.h>
int main()
{  unsigned char
       n, // переменная определяющая номер строки
      k, // переменная для подсчета букв в подстроке
        symbol; // переменная - символ для печати
   for (n = 1; n<=5; n++) // номер строки изменяется от 1 до 5
 { // начало тела цикла по переменной n
     // ===== Печать первой части =====
      symbol = 'I' - (n-2)*2; // 1-е значение символа в 1-ой части
      for (k = 1; k<=n-1; k++) // номер символа в подстроке
     { // начало тела цикла по переменной k
        printf ("%2c", symbol); // печать очередного символа
        symbol = symbol + 2; // значение следующего символа
      } // конец тела цикла по переменной k
       // ===== Печать второй части =====
       printf (" A");
     // ===== Печать третьей части =====
     symbol = 'C'; // 1-ое значение символа в третьей подстроке
     for (k = 1; k<=5-n; k++) // номер символа в подстроке
    { // начало тела цикла по переменной k
        printf("%2c", symbol); // печать очередного символа
        symbol += 2; // вычисление значения следующего символа
     } // конец тела цикла по переменной k
      // ===== Переход на следующую строку =====
             printf("\n");
        } // конец тела цикла по переменной n
         system("pause");
         return 0;
}
Но мне нужно на основе этого кода сделать вид таблицы на второй картинке.
И у меня вышло лишь прописать символ 'А', правда таким образом я все только испортил.
Спасибо за любую помощь.
0
Изображения
  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2018, 15:16
Ответы с готовыми решениями:

Ошибка при написании программы
Код на скриншоте.

Трудности при разборе программы
Я только начала учить Си. Столкнулась с проблемой при разборе следующей программы: Дан массив A...

написании программы мини программы
Люди плиз кто понимает в си. Через 3 часа контрольная 1 курс. Помогите плиз. Скинь свою ссылку вк....

Помогите в написании программы(массив)
Дан массив целых чисел. Вывести те из них, индексы которых являются числами Фибоначчи. В си...

Передача параметров с указателями при написании функций
Помогите, напишите программу: Передача параметров с помощью указателей при написании функций....

8
D3m1an
171 / 136 / 65
Регистрация: 11.08.2016
Сообщений: 465
Завершенные тесты: 1
04.10.2018, 16:29 2
Лучший ответ Сообщение было отмечено JKman как решение

Решение

не знаю на сколько проще, но в вашем коде настолько много комментариев, что я просто не смог его разобрать, рябит в глазах. Удалять было их лень, поэтому написал по своему.
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
#include <stdio.h>
 
/* options */
#define HEIGHT      13      //размер поля(нечёт.)
#define TAB         "\t"    //символ разделитель
#define SYMBOL      'a'     //начальный символ
 
#define HALF_H      (HEIGHT / 2)
 
int main()
{  
    int sym, startSym = SYMBOL;
    /* i - string; j - word counter per string */
    for(int i = 0, j = 1; i < HEIGHT; i++)
    {
        if(i < HALF_H)
        {
            for(int t = 0; t < HALF_H - i; t++)
                printf(TAB);
            
            for(int t = 0, sym = startSym; t < j; t++)
            {
                printf("%c" TAB, (sym));
                /* changing symbols in string */
                if(t < j / 2)       sym--;
                else                sym++;
            }
            printf("\n");
    
            j+=2;
        }
        
        else
        {
            for(int t = 0; t < (i-HALF_H); t++)
                printf(TAB);
            
            for(int t = 0, sym = startSym; t < j ; t++)
            {
                printf("%c" TAB, (sym));
                if(t < j / 2)       sym--;
                else                sym++;
            }
            printf("\n");
            
            j-=2;
        }
        
        /* changing start symbol for every string */
        if(i < HALF_H)      startSym++;
        else                startSym--;
    }
    return 0;
}
Добавлено через 54 секунды
Вывод

Код
						a	
					b	a	b	
				c	b	a	b	c	
			d	c	b	a	b	c	d	
		e	d	c	b	a	b	c	d	e	
	f	e	d	c	b	a	b	c	d	e	f	
g	f	e	d	c	b	a	b	c	d	e	f	g	
	f	e	d	c	b	a	b	c	d	e	f	
		e	d	c	b	a	b	c	d	e	
			d	c	b	a	b	c	d	
				c	b	a	b	c	
					b	a	b	
						а
Код
			a	
		b	a	b	
	c	b	a	b	c	
d	c	b	a	b	c	d	
	c	b	a	b	c	
		b	a	b	
			a
1
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10297 / 6179 / 1555
Регистрация: 25.07.2009
Сообщений: 11,762
05.10.2018, 18:01 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void) {
    int i, j;
    
    for ( i = 0, j = 8; j >= 0; i += 2 ) {
        printf("%c ", 'A' + i % 10);
        if ( i % 10 == j ) {
            printf("\n");
            i -= 2;
            j -= 2;
        }
    }
    
    return 0;
}
Код
[andrew@andrew other]$ gcc -Wall sqr_a.c 
[andrew@andrew other]$ ./a.out 
A C E G I 
I A C E G 
G I A C E 
E G I A C 
C E G I A 
[andrew@andrew other]$
0
JKman
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 16
06.10.2018, 17:37  [ТС] 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
#include <stdio.h>
#include <windows.h>
int main()
{  unsigned char n,k,symbol;
   for (n = 1; n<=5; n++)
 {
      symbol = 'I' - (n-2)*2;
      for (k = 1; k<=n-1; k++)
     {
        printf ("%2c", symbol);
        symbol = symbol + 2;
      }
       printf (" A");
     symbol = 'C';
     for (k = 1; k<=5-n; k++)
    {
        printf("%2c", symbol);
        symbol += 2;
     }
             printf("\n");
        }
         system("pause");
         return 0;
}
0
06.10.2018, 17:37
D3m1an
171 / 136 / 65
Регистрация: 11.08.2016
Сообщений: 465
Завершенные тесты: 1
06.10.2018, 17:44 5

Не по теме:

JKman, да ничего, но просто комментарии реально стоит размещать только там, где происходит какая-то "тайна", сложная логика механизма, чтобы программистам долго не разбирать как это работает. А ставить коммент напротив строки: а+=b - говоря, что тут к а мы прибавляем b - есть лишнее

.

Добавлено через 46 секунд
JKman, вам какую матрицу то по итогу нужно? Ромб или квадрат ?
1
JKman
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 16
06.10.2018, 17:56  [ТС] 6
Спасибо за совет. Нужен ромб.
0
D3m1an
171 / 136 / 65
Регистрация: 11.08.2016
Сообщений: 465
Завершенные тесты: 1
08.10.2018, 10:34 7
JKman, ромб я вам сделал. Такой код не пойдет ?
0
JKman
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 16
08.10.2018, 17:42  [ТС] 8
К сожалению,нет. Все оказалось куда проще.
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
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    for(int row = 0; row < 7; ++row)
    {
        int d = abs(row - 3);
        char c = 'D' - d;
        int spaces = 2*d;
        for(int i = 0; i < spaces; ++i) printf(" ");
 
        for(char q = c; q >= 'A'; --q)
            {
                printf("%c ",q);
        }
        for(char q = 'B'; q <= c; ++q)
            {
                printf("%c ",q);
        }
        printf("\n");
    }
    system("pause > NULL");
}
0
D3m1an
171 / 136 / 65
Регистрация: 11.08.2016
Сообщений: 465
Завершенные тесты: 1
08.10.2018, 17:48 9
JKman, верно, но с другой стороны, всякое решение правильно, если отвечает конечным требованиям .
1
08.10.2018, 17:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2018, 17:48

Какой программой лучше пользоваться при написании программ на языке си
Какой программой лучше пользоваться при написании программ на языке си ( у меня window 7 64 бита...

Трудности в написании программы
Здравствуйте, помогите пожалуйста со следующей проблемой=) Начинаю программировать на прологе)...

Трудности в написании программы СИ++
Привет всем обитателям форума, уже несколько дней мучаюсь с написанием программы,программа...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru