1

Тема: Оператори вибору switch-case незамінні?

Шановні форумчане, маю завдання написати код на Сі, за яким програма виводить на екран піраміду завданої висоти і вирівнює її по лівому краю екрана. Я написав отакий код
<#include <cs50.h>
#include <stdio.h>
//*Програма має вивести на екран піраміду заданої висоти, вирівняти її по лівому краю екрана*//
int main (void)
{
    printf ("Whet is the height of the pyramid? \nGive me an between 1 and 10: ");//*Запитуємо яка висота піраміди*//
    int n = GetInt ();
   
    switch (n)
    {
        case 1:
        printf ("##");
        break;
       
        case 2:
        printf ("0##\n###");
        break;
       
        case 3:
        printf ("00##\n0###\n####");
        break;
       
        case 4:
        printf ("000##\n00###\n0####\n#####");
        break;
       
        case 5:
        printf ("0000##\n000###\n00####\n0#####\n######");
        break;
       
        case 6:
        printf ("00000##\n0000###\n000####\n00#####\n0######\n#######");
        break;
       
        case 7:
        printf ("000000##\n00000###\n0000####\n000#####\n00#######\n0########\n########");
        break;
       
        case 8:
        printf ("0000000##\n000000###\n00000####\n0000####\n000######\n00#######\n0########\n#########");
        break;
       
        case 9:
        printf ("00000000##\n0000000###\n000000####\n00000#####\n0000######\n000#######\n00########\n0#########\n##########");
        break;
       
        case 10:
        printf ("000000000##\n00000000###\n0000000####\n000000#####\n00000######\n0000#######\n000########\n00#########\n0##########\n###########");
        break;
       
        default:
        printf ("You picked an invalid int!\n");
        break;
    }
}>
Він працює, але мені не подобається. Довелось вручну писати що виводити на екран для кожного значення висоти піраміди. Підкажіть, будь ласка, як по-іншому написати цю програмку.

2

Re: Оператори вибору switch-case незамінні?

for(int i;i < MAX;i++)
{
.... / тут код;
}
Подякували: mityaev1

3

Re: Оператори вибору switch-case незамінні?

Тут вам подвійний цикл потрібен.
І теги code не забувайте.

Подякували: mityaev1

4

Re: Оператори вибору switch-case незамінні?

Я намагався зробити подвійний цикл, але він у мене виводить в одну строку і я не знаю як з цим боротись.
Ось код, що працює "не так"...

#include <cs50.h>
#include <stdio.h>
//*Програма має вивести на екран піраміду заданої висоти, вирівняти її по лівому краю екрана*//
int main (void)
{
    printf ("Whet is the height of the pyramid? \nGive me an between 1 and 10: ");//*Запитуємо яка висота піраміди*//
    int height = GetInt ();
     for (int i = 1; i <= height; i++)
    {
        for (int j = 1; j <= height; j++)
        {
            if( j <= height - i )
           printf ("0");
            else
           printf ("#");
        }
    }
    return 0;
}

5

Re: Оператори вибору switch-case незамінні?

але він у мене виводить в одну строку

Дивно. В шостому рядку ви знаєте про \n, а далі — ні.

Подякували: koala, mityaev2

6

Re: Оператори вибору switch-case незамінні?

Да я знаю про /n, не знаю як її покласти так, щоб вона працювала після кожної ітерації...

7 Востаннє редагувалося Betterthanyou (04.02.2017 17:45:59)

Re: Оператори вибору switch-case незамінні?

[del]

8

Re: Оператори вибору switch-case незамінні?

mityaev написав:

Да я знаю про /n, не знаю як її покласти так, щоб вона працювала після кожної ітерації...

Не після, а в кінці.

Подякували: mityaev1

9

Re: Оператори вибору switch-case незамінні?

koala написав:
mityaev написав:

Да я знаю про /n, не знаю як її покласти так, щоб вона працювала після кожної ітерації...

Не після, а в кінці.

Ось саме цього (де притулити "\n") я і не розумію. Притулю так "0\n" починають 0 у стовпчик складатись, притулю так "#\n" - # у стовпчик кладуться... :(

10

Re: Оператори вибору switch-case незамінні?

Його можна виводити і не притулюючи ні до 0, ні до #

Подякували: mityaev1

11

Re: Оператори вибору switch-case незамінні?

#include <stdio.h>

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

   n = 5;

   for(i = 0; i < n; i++) {
      for(j=0; j<i; j++)
         printf("  "); 

      for(j=i; j < n; j++)
         printf(" *");

      printf("\n");
      
   }
   
   return 0;
}

от вам приклад коду

12

Re: Оператори вибору switch-case незамінні?

quez написав:

Його можна виводити і не притулюючи ні до 0, ні до #

А як?

13

Re: Оператори вибору switch-case незамінні?

Прихований текст

Вперше після 90-х побачив людину яка пише назву мови програмування так як вона вимовляється.
Чи то студіозус вчится ще за радянськими підручниками - чи ... навіть не знаю :)

Подякували: mityaev1

14

Re: Оператори вибору switch-case незамінні?

Ви цілком правильно визначили джерело знань

15 Востаннє редагувалося -=ЮрА=- (04.02.2017 22:04:23)

Re: Оператори вибору switch-case незамінні?

Підкажіть, будь ласка, як по-іншому написати цю програмку.

#include <stdio.h>

int main(){
    size_t i,j;
    size_t height = 7;
    for(i = 0; i < height; i++ )
    {
        for(j = 0; j <= height; j++ )
        {
            if(j + 1 < height - i)
                printf("0");
            else
                printf("#");
        }
        printf("\n");
        
    }
    return 0;
}

http://codepad.org/VbufHeeF

000000##
00000###
0000####
000#####
00######
0#######
########

16

Re: Оператори вибору switch-case незамінні?

koala написав:

Тут вам подвійний цикл потрібен.

Навіщо? ;)

Ліньки підганяти константи (з чого починати цикл, чим закінчувати, що додати у параметри «точності» рядків) і ліньки додавати перевірку height <= strlen, нашвидкоруч якось так

#include <stdio.h>

const char hashes[] = "########################";
const char zeros[]  = "000000000000000000000000";

int main(){
    size_t i,j;
    size_t height = 7;
    for(i = 0; i < height; i++ ) {
        printf("%.*s%.*s\n", height-i, zeros, i, hashes);
    }
    return 0;
}

http://codepad.org/xjYtkljZ

0000000
000000#
00000##
0000###
000####
00#####
0######

17

Re: Оператори вибору switch-case незамінні?

ReAl написав:
koala написав:

Тут вам подвійний цикл потрібен.

Навіщо? ;)

Бо якщо людина не може подвійний цикл написати, то специфікатори виведення для неї - взагалі вища математика. Хай основи вчить.

Подякували: ReAl1

18

Re: Оператори вибору switch-case незамінні?

Загалом так, специфікатори printf/scanf це практично ще одна мова для їхніх інтерпретаторів.

19

Re: Оператори вибору switch-case незамінні?

ReAl, у тебе не та піраміда яка намальована у посту1. 1 - дає ##
Перевір себе http://codepad.org/gcxCasc9

20

Re: Оператори вибору switch-case незамінні?

Ну я ж написав «Ліньки підганяти константи (з чого починати цикл, чим закінчувати, що додати у параметри «точності» рядків)», це просто ідея.
Треба додати корекції до «точностей» для форматного рядка під конкретні потреби. І не факт, що код повідомлення 1 відповідає реальному завданню.
Коли мені треба було друкувати гістограми, вони виглядали як було треба :)