2013-11-15 3 views
0

Я пытаюсь создать флаг Дании в C через PPM, но я не могу заставить свою функцию работать, а также хочу найти более эффективный способ зацикливания всех мест вместе, вместо выполнения всех if if else.Создание флага в C через PPM

for(i=0; i < height; i++){ 
    for(x=0; x < width; x++){ 
    if(x <= width *.3 && i <= height * .3) 
    { 
    printf("%i", Pixel(255,51,51)); 
    } 
    else if(x<= width * .1 && i <= height *.1) 
    { 
    printf("%i",Pixel(0,0,0)); 
    } 
    else if(x <= width * .405 && i <= height *.3) 
    { 
    printf("%i", Pixel(255,51,51)); 
    } 
    else if(x <= width * .4 && i <= height) 
    { 
    printf("%i", Pixel(0,0,0)); 
    } 
    else 
    { 
    printf("%i", Pixel(255,51,51)); 
    } 
} 
} 

Это мое тело, я понятия не имею, как петли вместе, а не создавать массовые количества, если/иначе, которые половину времени, вероятно, не будет работать ....

void Pixel(int red, int green, int blue){ 
    printf("%i %i %i", red, green, blue); 
} 

Также по какой-то причине моя функция будет компилироваться ... Может ли кто-нибудь помочь мне в этом вопросе?

ответ

0

Прочитайте, как использовать логические операторы && и ||.

Нет необходимости добавлять отдельные проверки для «левого красного, среднего белого, красного цвета», вы можете принять, вы рисуете красным цветом и проверяете только среднюю часть.

Поскольку вы хотите нарисовать в белом, когда [х> 0,3 & & х < = 0,4] или [у> 0,3 & & у < = 0,4], вы можете объединить это в один if проверки. То же самое касается черной границы - ей нужна только одна проверка.

if (x < width * .1 || y < height * .1 || x > width * .9 || y > height * .9) 
    ..black.. 
else 
    if ((x > width *.3 && x <= width * .4) || (y > height *.3 && y <= height * .4)) 
    ..white.. 
    else 
    ..red.. 

также: Ваш Pixel рутина уже выводит значение RGB, так что нет никакой необходимости, чтобы попробовать, что еще раз, когда вы это называете. То, что происходит сейчас, что

printf("%i", Pixel(255,51,51)); 

первые печатает R, G, B значения, а затем попытки Отпечатать «результат» вызова функции Pixel. Это не работает, потому что Pixel не возвращает значение. Ваш компилятор должен был предупредить вас об этом, поэтому, пожалуйста, проверьте настройки компиляции. (Но обратите внимание, что добавление return x утверждения в этой функции не помогает немного, потому что он не вычисляет ничего вы заинтересованы.)

Наконец, я бы настоятельно рекомендую, используя y вместо i итерировать с четко Y значением , Я заметил, что использовал это «инстинктивно» в своих объяснениях.

После фиксации несколько небольших вопросов (например, Pixel выходные три цифры, разделенные пробелом, но если вы называете это во второй раз, первая новая цифра будет прилипать к предыдущему) Я получил это:

flag of Denmark

в формате PPM, который я мог бы открыть правильно в Photoshop (а затем преобразовать в PNG, потому что SO не нравится изображения PPM).

+0

Ах спасибо огромное! Я пытался выяснить соотношение в каждой границе, и я использовал wikipedia .... похоже, что я был не так, когда использовал соотношение ширины и высоты. – Deej

+0

В моей книге они всегда использовали i, так что я всегда следовал за этим, но я определенно понимаю, откуда вы пришли с y-размещением. Еще раз спасибо! @Jongware – Deej

+0

Если это ответит на ваш вопрос, вы можете подумать о его принятии. – usr2564301

Смежные вопросы