PDA

Показать полную графическую версию : Помогите решить задачу на Си


friter
08-11-2011, 23:42
задача не затейливая, но вот я никак не могу её должным образом решить.
В общем, надо нарисовать прямоугольный треугольник вида
*
**
***
*****
примерно такого, учитель нам такой показывал, стороны треугольника 4*5
проблема в том, что я никак не могу найти формулу, по которой прога рисовала бы треугольник с нужными мне сторонами. всегда получается, что в конце то больше, то меньше заданного числа...

уже долго бьюсь над этой задачей, но никак не могу её решить
пробовал через деление, пробовал через другие формулы треугольников, но никак не получается, уже руки опустились

yurfed
09-11-2011, 00:15
проблема в том, что я никак не могу найти формулу, по которой прога рисовала бы треугольник с нужными мне сторонами. »Геометрию учить не пробовали?
Прямоугольный треугольник (http://www.google.ru/search?sclient=psy-ab&hl=ru&lr=&newwindow=1&source=hp&q=прямоугольный+треугольник+формулы&oq=прямоугольный+треугольник&aq=2&aqi=g10&aql=&gs_sm=c&gs_upl=57287l69747l0l72353l20l20l1l0l0l3l235l2915l4.13.2l19l0)
Или например Прямоугольный треугольник. Определение тригонометрических функций. Прямоугольный треугольник. Тригонометрические формулы. Прямоугольный треугольник. Теорема Пифагора...... (http://www.clascalc.ru/triangle.htm)

friter
09-11-2011, 00:34
в том то и дело, что данные вами статьи я изучал, однако все равно не получается

lxa85
09-11-2011, 01:00
friter, хотелось бы видеть ход рассуждений. Это первое.
Второе, если хочется ответ здесь и сразу - изучайте машинную графику и алгоритмы построение треугольников с этой точки зрения.

friter
09-11-2011, 01:04
#include <stdio.h>
#include <math.h>
int main(void){
int a, Ta=0, b;
float temp=1, angle;
// ну тут понятно, воодятся 2 числа для сторон а и б
printf("a= b=\n");
scanf("%d %d", &a, &b);
//переходит со строчки на строчку
for(int i=0; i<a; i++){
printf("\n");
//вот тут и должна по моему располагаться формула
Ta++;
temp=tan(Ta/temp);

пока эксперементирую с формулами

//печатает заданное количество звездочек на строчке(я пока использую цифры, тк постоянно считать звездочки надоело)
for(int j=0; j<temp; j++)
printf("%2.f", temp);
}
return 0;
}

у меня уже голова не варит, тонны литературы просмотрел... Говорят чтобы стать мудрым, надо прочесть всего 3 книги, но чтобы найти их, нужно прочесть сотни. А вот на сотни у меня как раз таки времени нет...

ferget
09-11-2011, 02:20
вроде так


int size =;
int i, j ;
for(i = 1; i < size; i++){
for(j=0; j<i; j++)
printf("*");
printf("\n");
}

friter
09-11-2011, 03:07
этот вариант сразу отпадает, тк стороны А и В у треугольника могут быть не равными, к примеру 4*5 или 20*60 или 7*13 ну и тд...

LilLoco
09-11-2011, 07:37
Что то не совсем понятно, как из звездочек ("разного количества") может получится прямоугольный треугольник...
Вот например, как Вы говорите 4х5:

*
*
**
***
****

верхний элемент уже является лишним.
Получается только с равными катетами.

lxa85
09-11-2011, 09:05
//вот тут и должна по моему располагаться формула
Ta++;
temp=tan(Ta/temp);
пока эксперементирую с формулами »
Вот эти самые формулы и интересуют.
какие формулы смотрелись, почему не устроили и т.д. "Тонны литературы" не говорят ни о чем.

Busla
09-11-2011, 10:22
Не нужны здесь тригонометрические функции:
цикл от 1 до a
на каждом шаге прибавляем отношение a к b, округляем - выводим это кол-во звёздочек

чтобы звёздочки по вертикали рисовались правильно, принудительно округляем до единицы всё, что меньше

lxa85
09-11-2011, 13:03
Busla, этот ответ вытекал из посыла ТС изучать машинную графику и тамошние быстрые алгоритмы рисования. :)

friter
09-11-2011, 15:40
Я ошибься, когда написал что треугольник прямоугольный, он может быть не прямоугольным, ну в общем по заданным А и Б сторонам

Delirium
10-11-2011, 00:42
оворят чтобы стать мудрым, надо прочесть всего 3 книги, но чтобы найти их, нужно прочесть сотни. А вот на сотни у меня как раз таки времени нет... »
Интересно, это чем же так заняты у нас студенты, что у них нет времени читать книги? :) У меня почему то было время читать книги и по программированию, и по администрированию, и еще по куче тем :)

friter
10-11-2011, 16:21
void Triangle1 (){
float a, b, temp;
printf("a= b=\n");
scanf("%f %f", &a, &b);

for(int i=0; i < a; i++){
temp = b / a;
for(int j=0; j <= i*temp; j++){
if((i == 0)||(i == a-1)){
printf("*");
continue;
}
if((j >= 1)&&(j < (i*temp)-0.5))
printf(" ");
else printf("*");
}
printf("\n");
}
}


нашел решение

Женя.Дмитриев@vk
21-01-2019, 14:32
Даны 3 числа. Определить, можно ли из них создать прямоугольный треугольник.С++ Помогите )))))
как написать ??

mwz
21-01-2019, 15:00
Женя.Дмитриев@vk, ваш вариант?

Iska
21-01-2019, 19:17
как написать ?? »
Я лично предпочитаю сидя. Сначала в голове, затем на бумаге, затем на машине.




© OSzone.net 2001-2012