Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Программирование в С

976  
lisenkalejka посетитель29.05.15 18:48
lisenkalejka
NEW 29.05.15 18:48 
Здравствуйте, обращаюсь за помощью снова....В этот раз вообще не знаю с чего начать. Подскажите, с какого шага легче начать. и, самое главное, как....Заранее благодарна за любой совет и посильную помощь.
#1 
BorisL0 постоялец29.05.15 19:14
NEW 29.05.15 19:14 
в ответ lisenkalejka 29.05.15 18:48, Последний раз изменено 29.05.15 19:41 (BorisL0)
1. Программа должна уметь интерпретировать командную строку своего вызова, с которой ей передаются параметры. Для этого использовать стандартную функцию getopt.
2. Программа должна уметь прочесть структуру графа, как указано в 2.2. Я, правда, не нашел, откуда программа должна уметь это считывать :) Возможно, из текстового файла, имя которого передается
в командной строке.
Вывести базовую инфу о графе, как это указано: кол-во вершин, ребер итд.
3. Посчитать вектор PageRank путем
a) Многократного случайного "серфинга" по графу, с использованием генератора случайных чисел.
б) Вторым методом, путем многократного умножения вектора на матрицу M, как в пункте 1.2.
Программа должна посчитать матрицу М. как в пункте 1.2, по структуре графа и по вероятности P.
Результаты должны быть похожими :)
5. Нужно делать вывод результатов работы в формате, который требуется.
#2 
lisenkalejka посетитель31.05.15 14:16
lisenkalejka
31.05.15 14:16 
в ответ BorisL0 29.05.15 19:14
А где взять алгоритмы всего этого? Ведь нам ничего не дали, кроме скрипта с простыми примерами, и ни одного алгоритма, выбросили как рыбу и бейтесь. Может кто подскажет ссылки на подобные примеры, я только пару нашла, но там не очень подходит.
#3 
Murr патриот31.05.15 15:10
Murr
NEW 31.05.15 15:10 
в ответ lisenkalejka 31.05.15 14:16
А где взять алгоритмы всего этого?
------
Извечный вопрос - Где инженер должен взять то, чего у него нету?
Странный ответ - Он должен использовать свой мозг для нахождения способа решения...
#4 
BorisL0 постоялец31.05.15 15:23
NEW 31.05.15 15:23 
в ответ lisenkalejka 31.05.15 14:16
Точно нужных алгоритмов Вы не найдете.
Это ведь всего лишь конкретное задание.
Например, относительно чтения структуры графа из файла, я бы все строки до "заголовка" считывал командой getline, а непосредственно строки типа X->Y, как Вам указали, удобно будет считывать командой n=scanf(filestream, "%c->%c", &c1, &c2);
Еще вопрос, это ведь у Вас задание на чистом C, не С++? Просто в С некоторые вещи чуть замороченнее :)
#5 
lisenkalejka посетитель31.05.15 15:29
lisenkalejka
NEW 31.05.15 15:29 
в ответ Murr 31.05.15 15:10
Спасибо большое за ответ. Но у меня вопрос, что я лично вам такого сделала, что вы постоянно язвите? Я перед вами чем то провинилась? Вы скажите, может где-то на форуме обидела, по незнанию. Прошу прощения, если это так. Но с начала создания тем, вы ни разу ничего путного не подсказали, а лишь подкалываете. Я не отрицаю, что я полная дура в информатике, но я пытаюсь научиться, вы же тоже не с пеленок сразу все знали и умели. Я лишь просила посильной помощи и наводок, а не готовых решений....
#6 
lisenkalejka посетитель31.05.15 15:42
lisenkalejka
NEW 31.05.15 15:42 
в ответ BorisL0 31.05.15 15:23
Да, это просто в С(
#7 
Murr патриот31.05.15 21:02
Murr
NEW 31.05.15 21:02 
в ответ lisenkalejka 31.05.15 15:29
что вы постоянно язвите?
------
Я таки просто такой есть...
но я пытаюсь научиться
-----
Увы, но то, что было описано как программа обучения либо рассчитано на гениев, способных осваивать все еще до начала лекции, либо не позволяет обучить чему-либо путевому в программировании. С той скоростью, с которой предполагается давать материал, можно проскочить, галопом-по-европам, ознакомительно, по всему массиву и... спокойно забыть об том что было сделано. Все одно забудется со временем т.к. закрепления пройденного не происходит - слишком частые переключения на другой язык/инструмент. Смысл - пытаться что-либо обьяснить (тебе) в той ситуации - отсутствует.
Я лишь просила посильной помощи и наводок
-----
А что такое Граф вам обясняли? Основные проблемы/вопросы/ситуации, решение которых сводится к определению Графа и применению более-мение стандартных методов нахождения решения на Графе (3 курс советского университета), группе давали? Ограничения и допустимость методик разьясняли? Думаю, что нет. Как, в этой ситуации дать "наводку" решения на Графе?
С точки зрения программирования на Си... ну скажем так - ребро графа соответствует функции перехода между вершинами... так вот решение в лоб - определяй в ребре указатель на функцию, определяй саму функцию перехода и навигацию по Графу вызывая функции и набирая требуемую статистику. Опсс... до понимания термина "указатель на функцию" еще месяца 3-4 изучения языка Си по методике полного погружения и не факт что будет понято...
Это Я еще не рассматривал варианты определения/представления Графа в языке Си - в зависимости от методики определения некоторые моменты делаются проще...
вы же тоже не с пеленок сразу все знали и умели.
-----
Ты помните чем когда и как у тебя развивали мелкую моторику пальчиков?
По современным методикам это делается в школе, во втором классе... иногда - позднее.
У меня же это происходило в возрасте 4.5 лет - те игрушки, которые мне покупали, требовали ее наличия... или не позволяли себя использовать. Помимо моторики игрушки еще требовали не совсем тривиального мышления. Сейчас такие игрушки просто не делают - заменили кастрированным вариантом.
Ну а к тому моменту когда начали обучать программированию - уже лет 15 как был неплохо знаком с паяльником и схемотехникой... и имел высшее образование в области матеметики.
Так что - да, начали - с пеленок.
#8 
schweps2 старожил31.05.15 21:40
schweps2
NEW 31.05.15 21:40 
в ответ lisenkalejka 31.05.15 15:29
На счёт алгоритма посмотрите: Кристофидес, теория графов. Там много полезного.
Germany.ru Boot CD v1.0 поможет :)
#9 
lisenkalejka посетитель01.06.15 09:07
lisenkalejka
NEW 01.06.15 09:07 
в ответ Murr 31.05.15 21:02
Очень рада за Вас,маленький гений. Я с паяльником в руках не родилась. Материал дается галопом по Европам, согласна абсолютно. Поэтому и помощи попросила,а Вы с высоты своего опыта и полета только плюете. Взрослый мужчина, с высшим образованием, гений с пеленок,а просто совет дать,надломитесь. В любом случае, спасибо Вам и за это,как никак ценный урок в жизни,что не стоит ожидать помощи от таких вот гениев,ибо спуститься к нам смертным выше Вашего положения и оскорбляет Вашу воодухотворенную гениальную натуру. Но что же теперь делать? Бросать? Не в моих правилах. Буду дальше биться.
#10 
lisenkalejka посетитель01.06.15 09:07
lisenkalejka
NEW 01.06.15 09:07 
в ответ schweps2 31.05.15 21:40
Спасибо огромное!!!
#11 
BorisL0 постоялец01.06.15 09:36
NEW 01.06.15 09:36 
в ответ lisenkalejka 29.05.15 18:48, Последний раз изменено 01.06.15 12:41 (BorisL0)
Я бы предложил следующий алгоритм, пока только для прочтения графа из файла.
В C неудобно создавать массивы (вершин, ребер) по ходу 1-го чтения файла,
т.к. неизвестно, каких размеров будет итоговый массив. Поэтому мне кажется, проще всего считать этот
файл дважды:
1-й раз: просто прочесть имя графа (GraphBezeichner) и количество ребер (строк с ->). После этого мы получаем это значение NKanten и закрываем файл командой fclose();
Создаем массивы (т.е. выделяем память командами malloc для ребер array_kanten (тип самого ребра я бы задал так struct Kante {int ausgangsKnote, eingangsKnote;}; ) размера NKanten и array_knoten вершин -- тут мы точного кол-ва пока не знаем (будет посчитано после 2-го прочтения файла), но можем взять по максимуму размера 2*NKanten. Тип элемента этого массива, например struct Knote{char name[257]; int ausgangsZahl, eingangsZahl;};)
2-й раз: каждое из ребер считываем командой n=scanf("%s%s%s", s1, s2, s3), где s1 и s3 -- массивы char размера 258 (под имена вершин), а s2 -- просто техническая ненужная вещь, куда сохраняется "стрелочка".
От s3 с конца нужно не забыть убрать лишний символ ";"
После прочтения каждого ребра нужно установить, встречались ли эти 2 вершины раньше (т.е. их имена сохранены в массиве array_knoten), или это новая/ые вершины, которые туда нужно сохранить (и при этом увеличить счетчик кол-ва вершин). В любом случае,
у нас получается соответствие между индексом(номером) вершины в массиве array_knoten и ее именем (которое сохраняется в поле name структуры Knote). Необходимо также для прочитанного ребра сохранить его
информацию, т.е. ausgangsKnote, eingangsKnote в соотв. элементе массива array_kanten.
Снова закрыть файл fclose();
После этого можно для каждой из сохраненных вершин в массиве array_knoten посчитать кол-во исходящих и входящих в нее ребер. Для этого просто пройти циклом по массиву ребер и проверить, где номер начальной
или конечной вершины совпадает с номером той, которую мы сейчас анализируем. Эти числа нужно сохранить в элемент массива array_knoten[ i ].ausgangsZahl и
array_knoten[ i ].eingangsZahl.
Уже сейчас можно вывести информацию, как первый Meilenstein, про кол-во ребер, вершин, и макс/мин исходящих/входящих ребер.
Пока все с этой частью алгоритма.

#12 
Murr патриот01.06.15 11:03
Murr
NEW 01.06.15 11:03 
в ответ lisenkalejka 01.06.15 09:07
Но что же теперь делать?
------
А что в такой ситуации должен делать нормальный инженер? Правильно - анализировать проблему,
делать оценку ситуации и прогнозировать результат. И искать способ получения более приемлемого
результата.
Буду дальше биться.
-----
Не проблема. Проблема - результативность. Она, априори, будет никакая. Почему так - обьяснено выше.
а просто совет дать
-----
Рекомендации были приведены. Так же был задан вопрос об том, понятны ли данные рекомендации.
По реакции на рекомендации понятно, что, как и предполагалось и обосновывалось, в них ничего не
понятно. А ведь рекомендации, с учетом ситуации, были предельно упрощены. Остается только язвить,
что Я и делаю изначально...
#13 
Murr патриот01.06.15 11:16
Murr
NEW 01.06.15 11:16 
в ответ BorisL0 01.06.15 09:36
s2 -- просто техническая ненужная вещь, куда сохраняется "стрелочка".
-----
Стоило бы написать и опробовать реальный код.
Спецификация для %s - Any number of non-whitespace characters, stopping at the first whitespace character found. A terminating null character is automatically added at the end of the stored sequence.
#14 
BorisL0 постоялец01.06.15 11:23
NEW 01.06.15 11:23 
в ответ Murr 01.06.15 11:16, Последний раз изменено 01.06.15 11:23 (BorisL0)
Опробовал. Работает. Дело в том, что в задании указано, что вокруг "стрелочки" стоят пробелы.
Так что все Ок: в s1 сохраняется имя исходящей вершины, s2 -- стрелочка, s3 -- имя вершины-цели плюс символ ";" который еще нужно убрать.
#15 
Murr патриот01.06.15 11:43
Murr
NEW 01.06.15 11:43 
в ответ BorisL0 01.06.15 11:23
в задании указано, что вокруг "стрелочки" стоят пробелы
-----
"Ну тады ой" - по-немецки Я не читаю.
#16 
Simple Nothing is f*cked04.06.15 17:23
Simple
NEW 04.06.15 17:23 
в ответ lisenkalejka 01.06.15 09:07
Не теряйте времени на лузеров с понтами.
#17