Новичок
Джуниор
Регистрация: 07.11.2009
Сообщений: 1
|
Задание: найти и исправить ошибку
Здравствуйте!!! У меня такая проблема... на последнем занятии по программированию по С дали такое задание: найти и исправить ошибку в коде и сделать чтобы программа рисовала линии звездочками (*). Я уже неделю сижу пытаюсь от фонаря найти ошибку но не получается. Вот код (прошу прощения что тут все по польски - учусь в польше):
Цитата:
#include <stdio.h>
#define MAXX 5
#define MAXY 10
#define PELNE '*'
#define PUSTE '.'
/* sprawdza, czy argument x jest zawarty w przedziale domknietym [min,max]
wartosc zwracana:
-1 jesli x<min
0 jesli min<=x<=max
1 jesli x>max
*/
char pozaZak (int x, int min, int max)
{
if (x<=min) return -1;
if (x>=max) return 1;
return 0;
}
/* Wypelnia pionowa linie w tablicy ekran znakami PELNE.
Polozenie poczatkowe kreslonej linii: px, py
Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
jest przycinana do rozmiarow tablicy
*/
void rysPion (char ekran[MAXX][MAXY], int px, int py, int nZnak)
{
int x,y;
int i;
for (x=px, y=py, i=0; i<=nZnak; i++)
{
if (pozaZak(x,0, MAXX-1)) return;
if (pozaZak(y,0, MAXY-1)) return;
ekran[x][y]=PELNE;
y++;
}
}
/* Wypelnia pozioma linie w tablicy ekran znakami PELNE.
Polozenie poczatkowe kreslonej linii: px, py
Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
jest przycinana do rozmiarow tablicy
*/
void rysPoziom (char ekran[MAXX][MAXY], int px, int py, int nZnak)
{
int x,y;
int i;
for (x=px, y=py, i=0; i<=nZnak; i++)
{
if (pozaZak(x,0, MAXX-1)) return;
if (pozaZak(y,0, MAXY-1)) return;
ekran[x][y]=PELNE;
x++;
}
}
/* Wypelnia ukosna w lewo linie w tablicy ekran znakami PELNE.
Polozenie poczatkowe kreslonej linii: px, py
Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
jest przycinana do rozmiarow tablicy
*/
void rysUkosL (char ekran[MAXX][MAXY], int px, int py, int nZnak)
{
int x,y;
int i;
for (x=px, y=py, i=0; i<=nZnak; i++)
{
if (pozaZak(x,0, MAXX-1)) return;
if (pozaZak(y,0, MAXY-1)) return;
ekran[x][y]=PELNE;
x--;
y++;
}
}
/* Wypelnia ukosna w prawo linie w tablicy ekran znakami PELNE.
Polozenie poczatkowe kreslonej linii: px, py
Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
jest przycinana do rozmiarow tablicy
*/
void rysUkosP (char ekran[MAXX][MAXY], int px, int py, int nZnak)
{
int x,y;
int i;
for (x=px, y=py, i=0; i<=nZnak; i++)
{
if (pozaZak(x,0, MAXX-1)) return;
if (pozaZak(y,0, MAXY-1)) return;
ekran[x][y]=PELNE;
x++;
y++;
}
}
/* --> Napisac samodzielnie podczas laboratorium*/
/* --> Obsluzyc sytuacje, gdy px, dx<0 */
/* Wypelnia dowolna linie w tablicy ekran znakami PELNE.
Polozenie poczatkowe kreslonej linii: px, py.
Argumenty dx, dy definiuja kierunek kreslenia
Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
jest przycinana do rozmiarow tablicy
*/
void rysLinia (char ekran[MAXX][MAXY], int px, int py, int dx, int dy, int
nZnak)
{
printf ("\n***\n napisz mnie! \n***\n");
}
/* Rysuje zawartosc ekranu na standardowym wejsciu */
void rysEkran (char ekran[MAXX][MAXY])
{
int x,y;
for (y=0; y<MAXY; y++)
for (x=0; x<MAXX; x++)
printf("%c", ekran[x][y]);
printf("\n");
}
/* Wypelnia ekran znakami PUSTE */
void czyscEkran (char ekran[MAXX][MAXY])
{
int x,y;
for (y=0; y<MAXY; y++)
for (x=0; x<MAXX; x++)
ekran[x][y] = PUSTE;
}
int main()
{
char ekran[MAXX][MAXY];
czyscEkran(ekran);
rysPion(ekran, 4,2,5);
rysEkran(ekran);
return 0;
}
|
Комментарии по переводу: 1. Первый код проверяет принадлежит ли х отрезку [min, max].
2. второй код рисует перпендикулярную линию, третий код - горизонтальную, 4 - диагональ влево, 5- диагональ вправо.
Программа должна нарисовать такую линию:
.....
.....
....*
....*
....*
а рисует только такое ......*.....*.....*.....*.......... .. то есть не переносит на новую строку.
Заранее спасибо огромное и прошу прощения за объем)))
|