LINUX.ORG.RU

Задание по языку СИ


0

1

Вводятся рандомно точки на графике, и нужно соединить их в графики, так, чтобы все точки были перечёркнуты. Когда уже эти точки известны, как соединить их в графики??? Помогите пожалуйста! Это нужно сделать на языке Си.


Ответ на: комментарий от Sam123

Плати денежку сделаем. Иначе делай сам. И вообще зачем ты учишься если учится не хочешь? Если хочешь стать диретором то прокачивай скилы дитектора, плати и за тебя всё сделают, а тебя отчислят =)

anonymous
()
Ответ на: комментарий от Sam123

ты ж заказчик

  • задание ты огласил
  • называй «бюджет»

может и договоришься с кем-то

anonymous
()
Ответ на: комментарий от Sam123

Откуда я знаю, напиши там (создай тему с тем же или более чётким описанием задачи) укажи сумму которую ты сам готов потратить на такое. Либо кто-то согласится на твою сумму и вы сработаетесь, либо назовут свою сумму и ты уже решишь готов ли на неё или нет.

anonymous
()
Ответ на: комментарий от Sam123

А может сам решишь? А то ведь отчислят. Покажи что пытался сделать и что не получается с таким тут помогают. А вот просто с задачей которую в падлу решать тут увы помогать не будут. (Хотя некоторые помогают, но так что-бы увеличить вероятность отчисления тем самым уменьшают рынок труда и убирают будущих конкурентов =D )

anonymous
()
Ответ на: комментарий от anonymous

мне не впадлу это делать, просто не очень получается. Вот что я сделал: #include<stdio.h> #include<math.h> #include <stdlib.h> int draw(int, int, int, int);

char mas[10][21]; int main() {

int i;
int x, y,
	ox, oy,
	ax, ay,
	ex, ey,
	ix, iy,
	tx, ty,
	kx, ky,
	dx, dy;

srand(time(NULL));

snprintf(mas[0], "%s\n", "|                   ");
for (i = 1; i < 9; i++) {
	snprintf(mas[i], "%s", "|                   ");
}
snprintf(mas[9], "%s", "|___________________");




x = rand() % 18 + 1;
y = rand() % 8 + 1;
mas[y][x] = '.';

ox = rand() % 18 + 1;
oy = rand() % 8 + 1;
mas[oy][ox] = '.';


ax = rand() % 18 + 1;
ay = rand() % 8 + 1;
mas[ay][ax] = '.';


ex = rand() % 18 + 1;
ey = rand() % 8 + 1;
mas[ey][ex] = '.';

ix = rand() % 18 + 1;
iy = rand() % 8 + 1;
mas[iy][ix] = '.';


tx = rand() % 18 + 1;
ty = rand() % 8 + 1;
mas[ty][tx] = '.';

kx = rand() % 18 + 1;
ky = rand() % 8 + 1;
mas[ky][kx] = '.';

dx = rand() % 18 + 1;
dy = rand() % 8 + 1;
mas[dy][dx] = '.';



for (i = 0; i < 8; i++)
	printf_s("%s\n", mas[i]);
printf_s("%s", mas[9]);

printf_s("\n\n\n");

draw(x, y, ox, oy);
draw(ox, oy, ax, ay);
draw(ax, ay, ex, ey);


draw(ix, iy, tx, ty);
draw(tx, ty, kx, ky);
draw(kx, ky, dx, dy); 

draw(x, y, dx, dy);




for (i = 0; i < 8; i++)
	printf_s("%s\n", mas[i]);
printf_s("%s", mas[9]);

}

int draw(int x1, int x2, int y1, int y2) { for (;;) { if (x1 < x2) x1 += 1; else if (x1 > x2) x1 -= 1; if (y1 < y2) y1 += 1; else if (y1 > y2) y1 -= 1;

	mas[x1][y1] = '.' ;

	if (x1 == x2 && y1 == y2) break;
}

}

Sam123
() автор топика

скастуй метапрога. «графика и Си» его любимые фетиши. он тебе всё за так сделает. правда, придётся в его секту ряды последователей влиться.

anonymous
()
Ответ на: комментарий от Sam123

Впадлу — значит сам отчисляйся.

А так, да, в джоб.

fernandos ★★★
()
Ответ на: комментарий от Sam123

твой алгоритм я не смотрел, но принцип мне представляется очевидным

  • берешь начальную точку (точка «0») и находишь ближайшую к ней по одной оси (точка «1»)
  • соединяешь эти точки
  • находишь ближайшую точку к точке «1» …
  • повторяешь пока, есть точки

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

anonymous
()
Ответ на: комментарий от Sam123

Из вот такого

|                   
|                  
| .. .         .. 
|   ..           .
|   ..          
|   .............
|   .......   .
|   ..  .  . 

Нельзя получить график.

На одной оси ординат не должна быть 1 точка разве?

anonymous
()
Ответ на: комментарий от Sam123
  • четко опиши задание
  • выкладывай свой код с комментариями (что он делает)
  • выкинь эту ересь

я пытался соединить точки точками

anonymous
()
Ответ на: комментарий от Sam123

Добавил тебе своего говнокода

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

int draw(int, int, int, int);

char mas[10][21];
char mas2[10][21];

int main() {

    int i;
    int x, y, ox, oy, ax, ay, ex, ey, ix, iy, tx, ty, kx, ky, dx, dy;

    srand(time(NULL));

    snprintf(mas[0], 10,"%s\n", "|                   ");
    snprintf(mas2[0], 10,"%s\n", "|                   ");
    for(i = 1; i < 9; i++) {
        snprintf(mas[i], 10, "%s", "|                   ");
        snprintf(mas2[i], 10,"%s", "|                   ");
    }
    snprintf(mas[9], 10,"%s", "|___________________");
    snprintf(mas2[9], 10, "%s", "|___________________");

    x = rand() % 18 + 1;
    y = rand() % 8 + 1;
    mas[y][x] = '1';
    mas2[y][x] = '1';

    ox = rand() % 18 + 1;
    oy = rand() % 8 + 1;
    mas[oy][ox] = '2';
    mas2[oy][ox] = '2';

    ax = rand() % 18 + 1;
    ay = rand() % 8 + 1;
    mas[ay][ax] = '3';
    mas2[ay][ax] = '3';

    ex = rand() % 18 + 1;
    ey = rand() % 8 + 1;
    mas[ey][ex] = '4';
    mas2[ey][ex] = '4';

    ix = rand() % 18 + 1;
    iy = rand() % 8 + 1;
    mas[iy][ix] = '5';
    mas2[iy][ix] = '5';

    tx = rand() % 18 + 1;
    ty = rand() % 8 + 1;
    mas[ty][tx] = '6';
    mas2[ty][tx] = '6';

    kx = rand() % 18 + 1;
    ky = rand() % 8 + 1;
    mas[ky][kx] = '7';
    mas2[ky][kx] = '7';

    dx = rand() % 18 + 1;
    dy = rand() % 8 + 1;
    mas[dy][dx] = '8';
    mas2[dy][dx] = '8';

    for(i = 0; i < 8; i++)
        printf("%s\n", mas[i]);
    printf("%s", mas[9]);

    printf("\n\n\n");

    draw(x, y, ox, oy);
    draw(ox, oy, ax, ay);
    draw(ax, ay, ex, ey);
    draw(ex, ey, ix, iy);
    draw(ix, iy, tx, ty);
    draw(tx, ty, kx, ky);
    draw(kx, ky, dx, dy);

    draw(dx, dy, x, y);

    for(i = 0; i < 8; i++)
        printf("%s\n", mas[i]);
    printf("%s", mas[9]);
}

int draw(int y1, int x1, int y2, int x2) {
	int tmp_y1 = y1;
	int tmp_x1 = x1;
    for(;;) {
        if(x1 < x2)
            x1 += 1;
        else if(x1 > x2)
            x1 -= 1;

        if(y1 < y2)
            y1 += 1;
        else if(y1 > y2)
            y1 -= 1;

        mas[x1][y1] = '.';
	system("clear");
	    for(int i = 0; i < 8; i++)
		printf("%s\n", mas2[i]);
	    printf("%s", mas2[9]);
    printf("\nfrom \n");
    printf("x1 = %d -> %d\n", tmp_x1, x1);
    printf("y1 = %d -> %d\n", tmp_y1, y1);
    printf("to \n");
    printf("x2 = %d\n", x2);
    printf("y2 = %d\n", y2);
    printf("========= \n");
	    for(int i = 0; i < 8; i++)
		printf("%s\n", mas[i]);
	    printf("%s", mas[9]);
	sleep(1);

        if(x1 == x2 && y1 == y2) {
            mas[x1][y1] = '0';
            break;
        }
    }
}

anonymous
()
Ответ на: комментарий от Sam123

Ну вот тебе в виде намеренного говнокода правда генерация именно точек

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

char tablo_eblo[8][20] = {0};

void tablo_eblo_gen()
{
    srand(time(NULL));
    for (int kaunter = 0; kaunter < 8; ++kaunter) 
    {
        for (int yebala = 0; yebala < 19; yebala++)
        {
           tablo_eblo[kaunter][yebala] = ' ';
           if(yebala == 17)
           {
               tablo_eblo[kaunter][rand() %17] = '.';
               tablo_eblo[kaunter][18]='\n';
               tablo_eblo[kaunter][19]='\0';
               
           }
        }
    }

    for (int i = 0; i < 8; ++i)
    {
        printf("%s\n",tablo_eblo[i]);
    }
}


int main(int argc, char *argv[])
{
   tablo_eblo_gen(); 
    return 0;
}
xxx@yyy:~/Рабочий-Стол/654654645$ ./a.out 
         .         
            .      
 .                 
              .    
                .  
             .     
        .          
   .               
xxx@yyy:~/Рабочий-Стол/654654645$ ./a.out 
 .                 
       .           
               .   
      .            
      .            
      .            
           .       
               .   
xxx@yyy:~/Рабочий-Стол/654654645$ ./a.out 
 .                 
       .           
               .   
      .            
      .            
      .            
           .       
               .   
xxx@yyy:~/Рабочий-Стол/654654645$ ./a.out 
          .        
       .           
           .       
    .              
         .         
          .        
          .        
     .             
xxx@yyy:~/Рабочий-Стол/654654645$ 


Ты переводи это в нормальный код. А дальше пойдём рисовать линии по этим точкам. Опиши мысленно как ты видишь алгоритм рисования графика?

anonymous
()
Ответ на: комментарий от Sam123

это я про 1 код а про второй код, я генерацию точек сделал сам, проблема была только в том, чтобы соединить их линиями

Sam123
() автор топика
Ответ на: комментарий от Sam123

Я его специально так и написал, что бы ты разобрал его и переписал вдумчиво. В том и суть. Там ещё ошибка есть так уж и быть скажу где она первое нужно вставить break кое где, а второе \n в выводе не нужен. Додумай сам =) А я пока вторую часть подготовлю )))

anonymous
()
Ответ на: комментарий от Sam123

А, это и не важно, важнее что ты пытаешься понять таки, это похвально.

anonymous
()
Ответ на: комментарий от Sam123

Ну так расскажи, как по-твоему следует соединять точки. Ты не сможешь написать код, если не понимаешь как он работает.

anonymous
()
Ответ на: комментарий от anonymous

Зря ты так. ТС и тот аноним вроде бы делом занялись. Я не одобряю готовый код (пусть и с ошибками) как метод помощи – пусть ТС сам пишет, ему только на пользу. Послушать ход мысли ТС интересно.

anonymous
()
Ответ на: комментарий от anonymous

Я вначале прочитал нашел функцию line() graphics.h которая соединяет две точки линией, зная её координаты, но эта библиотека не стандартная и у меня не получилось её установить. 2 способ - это я сравнивал координату по икс и игрек, и в зависимости какая из них больше отнимал 1 у икса и игрека, ставя на то новое место точку.

Sam123
() автор топика
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от Sam123

Разве в Си нет «стандартных» библиотек для работы с графикой?

2 способ

Ты пытался переизобрести известный алгоритм построения линии по координатам её концов без вычислений с плавающей точкой.

anonymous
()
Ответ на: комментарий от anonymous

Прошу прощения, неверно трактовал вашу реплику

Я тоже думаю что ТС

сам себя запутывает, такое бывает

anonymous
()
Ответ на: комментарий от Sam123

Не, тебе нужно провести линию по точкам, линия может быть вертикальной ‘|’ и горизонтальной ‘_’. Вот возьми тетрадку и натыкай точек (на 1 оси по 1 точке) и теперь используя только | и _ последовательно их соеденяй, твои действия и есть алгоритм. Ну Вот есть у нас точка, над ней и под ней ничего нет гарантированно заменяем на ‘_’ сдвигаемся на другую линию в этой же позиции там есть точка? ели да ставим снова ‘_’ если нет смотрим все линии выше этой позиции и все линии ниже если есть выше то в этой позиции на всех линиях вствляем | до точки, а её заменяем на _ теперь переходим на следующую линию в этой же позиции и так далее. Это один из алгоритмов так сказать в лоб.

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

anonymous
()
Ответ на: комментарий от Sam123

Ты сконцентрировался именно на рисовании линий. Как ты брал точки из массива случайных? Код я не смотрел и важнее именно ход твоей мысли.

anonymous
()
Ответ на: комментарий от Sam123

Только я линии и позиции перепутал, смещаемся по позициям, а проверяем на разных линиях массив[линия][позиция]. Покажи что потом у тебя получилось и мы за тебя порадуемся и может подскажем ещё что-то.

anonymous
()
Ответ на: комментарий от Sam123

Если вы уже проходили рекурсии то тут будет удобно использовать рекурсию, так код станет в разы короче.

anonymous
()
Ответ на: комментарий от anonymous

Да не не DEL я тоже считаю важным услышать каков ход мыслей.

anonymous
()
Ответ на: комментарий от anonymous

координаты случайных точек я записал в переменные, и передавал их в функцию, которая соединяла пространство между ними точками, так я соединял в 2 «линии» из точек

Sam123
() автор топика
Ответ на: комментарий от Sam123

В этом месте у тебя «пробел» в алгоритме решения задачи.

  • если точек две линия строится либо от 1-й ко 2-й, либо от 2-й к 1-й
  • если точек 3 вариантов соединить их в линию будет больше
"1"-"2"-"3"
"1"-"3"-"2"
"2"-"1"-"3"
"2"-"3"-"1"
"3"-"1"-"2"
"3"-"2"-"1"

номера точек ничего ни говорят тебя о координатах. Просто точка «1» была первой получена (и т.д.) График ты должен строит не в порядке «выпадения» точек из генератора, а соединяя <здесь было принципиальное решение, но я его удалил>.

anonymous
()
Ответ на: комментарий от Shulman

Так хочется тебе тоже самое в каждом твоём втором треде сказать ты не представляешь =)

anonymous
()
Ответ на: комментарий от ya-betmen

Ненужно, нужно тупо пройтись по массиву и построить косую или прямую между каждой парой позиций. Ты оверинжиниришь на ровном месте.

anonymous
()

Ну как? Сдал?

anonymous
()
Ответ на: комментарий от anonymous

Во-первых, это скучно. Во-вторых, достаточно во-первых.

ya-betmen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.