Не знал, как объяснить задание, поэтому прилагаю рисунок.
т.е. от пользователя требуется ввести лишь оценки по предметам, а компьютер должен вычислить средний балл и нарисовать график, как на рисунке.
Если такое задание уже было, дайте, пожалуйста, ссылку. Я не нашёл.
Спасибо заранее!
sheka
14.03.2011 5:36
Тебе нужно готовое решение или сам че-нить хочешь сделать? Если готовое - в инете должны быть кучи-кучи похожих решений, если нет, то: 1. сначала вводишь данные в массив а из 5ти элементов 2. заходишь в граф. режим. 3. рисуешь оси линиями 4. GotoXY(1*kx,a[1]*ky]), где kx, kу - масштабы по осям 5. в цикле LineTo(i*kx,a[i]*ky]), где i - переменная цикла. 6. гуглишь как искать среднее. 7. гуглишь как выводить текст на экран. 8. end.
Drughi
15.03.2011 3:52
В том-то и загвоздка, что среднее арифм я то знаю, как посчитать. а вот как такой график построить на Pascal ABC - не знаю. Хотелось бы конечно готовое решение
procedure StrInBox(X, Y : Integer; s : String); begin SetPenColor (clBrown); DrawRectangle (X, Y, X + TextWidth(s) + 2*Fresh, Y + TextHeight(s) +2*Fresh); SetPenColor (clBlack); TextOut (X + Fresh, Y + Fresh, s); end;
var Scores : array[1 .. nScore] of Integer; // = (10, 10, 8, 8, 9);
XAxis : Integer; Average: Real; s : string;
begin StrInBox (RightPart, 10, InData); for i : Integer := 1 to nScore do begin var CurrStr := Subj[1, i] + ': '; TextOut (RightPart, 30 + i * 20, CurrStr); ReadLn (Scores[ i ]); TextOut (RightPart + TextWidth(CurrStr), 30 + i * 20, IntToStr (Scores[ i ])); end;
s := ''; for i:integer := 1 to 11 do begin var YPos := 50 + Pred (i)*GradeLen; if i > 1 then s := ' '; TextOut (2, YPos, s + IntToStr (11 - i)); // Нумерация оси OY Line (20, YPos, 22, YPos); // Засечки на оси OY end;
XAxis := (RightPart - 40) div nScore; for i : integer := 1 to nScore do begin var StartInterval := 20 + Pred(i)*XAxis + (XAxis div 2); var Coord_Y := 50 + Pred (11 - Scores[i])*GradeLen;
SetPenColor (clBlack); Line (StartInterval, 48 +10*GradeLen, StartInterval, 52 +10*GradeLen); // Засечки на OX SetFontColor (Colors[ i ]);
if i = 1 then MoveTo (StartInterval, Coord_Y) else begin SetPenColor (clGray); LineTo (StartInterval, Coord_Y); end; SetPenColor (Colors[ i ]); Circle(StartInterval, Coord_Y, 2); TextOut (StartInterval - (TextWidth (Subj[2, i]) div 2), 75 +10*GradeLen, UpperCase (Subj[2, i])); Average := Average + Scores[i]; end; Average := Average / nScore; TextOut (RightPart+Fresh, 90 + Succ (nScore)*20, 'Средний балл: ' + FloatToStr (Average)); end.
(с обычным, не .NET-овским PascalABC я не связываюсь. Во-первых, он устарел, и уже не поддерживается разработчиками, а во-вторых у меня его просто нет, и ставить я его не буду...)
Drughi
15.03.2011 20:22
volvo, Большущее спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.