Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2009, 15:45   #1
RubIlNick
Новичок
Джуниор
 
Регистрация: 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- диагональ вправо.

Программа должна нарисовать такую линию:
.....
.....
....*
....*
....*
а рисует только такое ......*.....*.....*.....*.......... .. то есть не переносит на новую строку.
Заранее спасибо огромное и прошу прощения за объем)))
RubIlNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите исправить ошибку Deniska112 Помощь студентам 4 25.06.2009 12:15
нужно исправить ошибку TheVenny Помощь студентам 17 06.11.2008 16:26
Исправить ошибку LLIypLLIyH Помощь студентам 5 16.06.2008 16:50
Помогите пожалуйста найти и исправить ошибку Sam04 Паскаль, Turbo Pascal, PascalABC.NET 4 10.06.2008 08:28
формирование матрицы (задание выполненно не могу найти сваю ошибку) КиношкА Помощь студентам 7 11.01.2008 03:50