Форум «Мир фантастики» — фэнтези, фантастика, конкурсы рассказов

Форум «Мир фантастики» — фэнтези, фантастика, конкурсы рассказов (https://forum.mirf.ru/index.php)
-   Компьютеры и гаджеты (https://forum.mirf.ru/forumdisplay.php?f=35)
-   -   Программирование (https://forum.mirf.ru/showthread.php?t=10348)

Skandal 13.09.2010 12:08

Программирование
 
Вот такой вот вопрос - полученное высшее образование оказалось не в кассу (применение по специальности только в гос организациях с зп в 8-9т.р.), приходится работать не по специальности + работа вообще не нравится. Подумал, что всегда нравилось возится с компами, да и предложения на рынке есть для соответствующих специалистов. Знаю, что на форуме есть народ близкий к этойтеме. Сидел смотрел курсы всякие - большой разброс по прогрммированию, администрированию и тд и тп. Самому вродь ближе web дизайн/ web программирование, работа с flash. Скажите, сложно ли это все освоить, при условии, что с точными науками я последние 8 лет вообще никак не связывался (т.е. последний раз алгеброй я занимался в школе), а в програмировании всякие там математики нужны позарез.

SpellCaster 13.09.2010 19:06

Насчет математики: в принципе, если ты не кодишь сложные алгоритмы (архивация, шифрование, 3д модели, расчёты всяческие) - то она на фиг не сдалась. Кое-где может пригодиться дискретка (множества, логические операции) и знание двоичной/16-чной систем. В целом же требуется скорее общий логический склад ума, чем знание разложения в ряд Тейлора.
Что касается того, сложно ли научиться - сказать не могу, сам начинал осваивать с 10 класса, да и интересовался этой темой. Возможно, стоит попробовать себя в web, т.к. многих трудностей обычных компилируемых языков там не встретишь. Но в web есть и другая засада - чтобы освоить на самом простом уровне вебкодинг, придется зарыться в: HTML, CSS, PHP/Perl, JS :) Либо флеш, он уже вещь в себе, так что можно и его попробовать на зуб. Правда, не уверен, что с него стоит начинать.
Что касается настольных приложений, то сейчас высоко котируются C# и Java. Начинать с них не посоветовал бы - слишком далеко от "реальности", их лучше осваивать, когда знаешь, что стоит за высокими абстракциями.

P.S. А не хочешь попробоваться в железячники/админы?

Skandal 13.09.2010 20:58

Цитата:

Сообщение от SpellCaster (Сообщение 958647)
P.S. А не хочешь попробоваться в железячники/админы?

Эти вещи мне близки - на днях менял блок питания и добавлял оперативы, под это дело решил разобрать системник - ну там куллер снял, термопасту поменял на проце и видюхе - для меня это прям шаманство. Да и с админством тоже интересно - среди друзей слыву типа спецом по этой части (хотя познания крайни малы, просто у знакомых они еще меньше:)
Лазил сегодня по всяким сайтам с курсами компьютернымим + изучал предложения на рынке = PROFIT заинтересовала тема с версткой и веб дизайном - когда то осваивал flash, даже лого для сайта одного делал. В общем, интересно все, что с компами связанно. Сейчас вот еще думаю куда податься учиться.

SpellCaster 13.09.2010 22:38

В дизайн стоит идти, если есть склонность к художничеству. В противном случае мы получаем кучу *опоруких сайтов-уродцев. У меня вот, к сожалению, данные способности отсутствую полностью... Кодинг всё-таки дело специфическое, надо иметь склонность. Попробуй по железно-админскому делу, можно еще в базы данных сунуться, это всегда актуально. У меня друган с универа с кодингом совершенно не совместим, да и глубокими познаниями при учебе не отличался, но пошел по линии админа БД, сейчас получает около 60к.

check32 13.09.2010 23:10

Ну чтобы с железом работать, тоже нужно хоть общее представление иметь как все крутится. А то так можно всю жизнь лишь ТЭЗы менять.

Skandal 13.09.2010 23:11

SpellCaster, про админов до недавнего времени знал, что они бородаты и в свитерах, :lol:
Но недавно тоже узнал, что вродь неплохо оплачиваема работа. Думаю все. Вродь к художествам есть склонность, но давно этим не занимался. Надо погуглить еще по предложениям о работе. Но спасибо за подсказку.

Vollmond 14.09.2010 17:02

Попробуй почитать книги по С++/С#. Легко и доступно. Если понравится то понравится, для освоения базы не так много времени нужно. Математика тоже не особо нужна. А если не понравится то уже и на остальное смотреть.
Цитата:

Сообщение от SpellCaster (Сообщение 958647)
Начинать с них не посоветовал бы - слишком далеко от "реальности", их лучше осваивать, когда знаешь, что стоит за высокими абстракциями.

С другой стороны - изобретать велосипеды пусть и востребовано, но сложно освоить, особенно с нуля. Шарп вполне годно, к тому же сейчас все на нем и строится, у нас даже универ на него с плюсов перешел. Хотя что бы побаловаться с тем как работает можно весдь про С почитать.
Цитата:

Сообщение от Skandal (Сообщение 958734)
заинтересовала тема с версткой и веб дизайном

ИМХО - жутко скучная муть эта ваша верстка.

Waterplz 14.09.2010 17:26

web- плох огромными табунами народа - не протолкнешься.

про flash ничего сказать не могу.

программирование - только если доставляет, причем доставляет сильно. если не готов сидеть 24/7 и лабать километры кода, то лучше даже не начинать. математика нужна не везде и не всегда, но желательна.

сисадминство - всегда пожалуйста. только учти что это от силы на 60% железо и софт, остальное - работа с людьми, причем в амплуа обслуживающего персонала.

SpellCaster 14.09.2010 17:38

Цитата:

Сообщение от Skandal (Сообщение 958839)
про админов до недавнего времени знал, что они бородаты и в свитерах

... и с котом обязательно! Причём у тебя два пункта уже выполнены, а третий (свитер) легко реализуем :)

Погляди, ага. Юниксовому админу, конечно, намного труднее, но не так уж и многие сейчас на юниксах работают. Плюс, если устроишься в небольшую контору, там придется заниматься всем от починки коврика для мыши до протягивания сетки :).

Vollmond 14.09.2010 17:58

Цитата:

Сообщение от SpellCaster (Сообщение 959153)
... и с котом обязательно!

... Кактус опять все забыли.
---
UPD
---

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

Iron Man 12.10.2010 00:55

О! А я вот пошел на курсы программирования Адинэс! Скоро буду крутым чипом/дейлом у бухгалтеров:)

SpellCaster 12.10.2010 10:24

Цитата:

Сообщение от Iron Man (Сообщение 974768)
я вот пошел на курсы программирования Адинэс

Прими мои соболезнования...

Skandal 12.10.2010 10:36

SpellCaster, а почему?

SpellCaster 12.10.2010 10:43

Skandal, помимо того, что он полностью на русском - что выглядит дико для привыкшего к нормальным языкам глаза либо, возможно, повлечет трудности с освоением их в будущем - он не особенно хорошо спроектирован, да и сама среда глючная. Правда, сам с ним дела не имел и допускаю, что это просто сложившийся предрассудок.

Aster 12.10.2010 11:57

Цитата:

Сообщение от SpellCaster (Сообщение 974833)
он полностью на русском

Насколько помню, есть варианты латиницей для всего синтаксиса.

Iron Man 12.10.2010 15:44

Есть, только ими никто не пользуется почти.

Единственная причина, почему я туда пошел - это востребованность в данное время программеров 1С и достаточно большая зарплата в перспективе.

Skandal 12.10.2010 15:46

Кстати, для сисадминов нужно знание и навыки программирования?
АПД.
Скрытый текст - Дракон Драконыч:
Дракон Драконыч, ты же винодел и адовый пивовар! Какой программирование? Кто нацию спаивать будет?

Iron Man 12.10.2010 15:49

Skandal, для сисадминов нужно уметь разбираться в железе, настраивать сети и смыслить в них. А так же уметь настраивать всё и вся, что питается источниками энергии:)
Программирование - если по совместительству только. Хотя большинство знакомых, которые работают сисяками, в той или иной степени увлекаются программированием. Причем over9000 из них обожают Доплюсплюс и До-диез и люто, бешено ненавидят Дельфи:)

Цитата:

Сообщение от Skandal (Сообщение 974943)
Дракон Драконыч, ты же винодел и адовый пивовар! Какой программирование? Кто нацию спаивать будет?

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

Skandal 12.10.2010 16:04

Цитата:

Сообщение от Iron Man (Сообщение 974946)
для сисадминов нужно уметь разбираться в железе, настраивать сети и смыслить в них.

Ну и отлично - как раз сейчас этому учусь, да и нравилось всегда это.

Iron Man 12.10.2010 16:07

Skandal, только без опыта хрен куда возьмут:) надо курсы какие-нибудь закончить!

Vollmond 12.10.2010 16:54

Цитата:

Сообщение от Iron Man (Сообщение 974946)
Skandal, для сисадминов нужно уметь разбираться в железе, настраивать сети и смыслить в них. А так же уметь настраивать всё и вся, что питается источниками энергии:)

Еще уметь ковыряться в Win/*nix

Skandal 12.10.2010 17:01

Iron Man, ну, на курсы и хожу. При Баумнке.

SpellCaster 12.10.2010 19:37

Цитата:

Сообщение от Skandal (Сообщение 974943)
для сисадминов нужно знание и навыки программирования?

Когда захочется автоматизировать создание аккаунта или бэкап данных или ещё какую-то хитрую шнягу - то скрипты командных оболочек - первый помощник админа. Особых хитрых кодер-приёмов не требует, но разбираться в приемах кодинга придется. Плюс отладка без сред, точек останова и прочих приятностей.

Skandal 13.10.2010 00:38

SpellCaster, все хотел спросить - а ты сам в этой сфере работаешь или по стольку по скольку приходится сталкиваться?

SpellCaster 13.10.2010 14:59

Skandal, работаю с самого начала, уже лет 8 как :)

Iron Man 13.10.2010 23:37

Фух. Только что поборол ветряные мельницы и прошел сквозь бетонную стену авторских прав адинэса и установки 7-й версии на 7-й виндовс.

Как не пытались жадные адинэсовцы скрыть от раздач на разных трекерах свои версии программ, я их прошел! Теперь все версии со всеми конфигурациями в кармане:)

Так, ладно, это было лирическое отступление (тут можно нужно меня поздравлять). А что по делу: какой на ваш взгляд язык программирования будет наиболее востребован в ближайшие годы? Сишарп и Ява?

SpellCaster 14.10.2010 16:49

Цитата:

Сообщение от Iron Man (Сообщение 975949)
какой на ваш взгляд язык программирования будет наиболее востребован в ближайшие годы? Сишарп и Ява?

Да. Плюс для веб разработок - php, питон, руби

Iron Man 23.10.2010 02:33

Только начав изучать C++ я ужаснулся: какого мужского органа я делал все прошлые годы? Тут же работы непочатый край...

SpellCaster 23.10.2010 23:03

Да уж, но насколько он поощряет плохой стиль программирования... доводилось ковыряться во многих крупных прогах, до чего ж они запутанные! Плюс манера делить каждый модуль на .h и .c файлы. Пока разберёшься, что к чему, - опухнуть можно.

Iron Man 25.10.2010 14:04

Есть вопрос по Дельфи. Все хаят все, что было после дельфи 7. Почему? Что там не так? Просто я практикуюсь только на 7-ке.

SpellCaster 25.10.2010 18:08

Iron Man, релизы были глючноваты. Ну и размеры выросли на порядок. Однако много хороших фишек добавили, так что плюсы перевешивают. 2007-я более-менее устойчива, 2009-я - ещё лучше, хотя в ней, вероятно, придётся освоить вопрос Юникода (старые паскалевские ухватки не подойдут). В 2010-й добавили некоторых вкусных вещиц, поэтому лично я недавно наконец на неё переполз.

Iron Man 25.10.2010 18:53

А как 2010-я среда называется? Это же теперь не Борланд?

Кстати, что там с перспективами Дельфи? А то что-то все больше орут, что скоро он загнется) или это зависть конкурентов?

Upd. По мере вникания в Delphi, начинаю делать выводы, что она (он) мне нравится все больше и больше!

SpellCaster 25.10.2010 23:23

Цитата:

Сообщение от Iron Man (Сообщение 983496)
А как 2010-я среда называется? Это же теперь не Борланд?

Embarcadero RAD studio, сейчас самая свежая версия - XE.
Цитата:

Сообщение от Iron Man (Сообщение 983496)
Кстати, что там с перспективами Дельфи? А то что-то все больше орут, что скоро он загнется) или это зависть конкурентов?

Ну, я очень сильно надеюсь, что перспективы есть :). В следующих версиях должны подогнать поддержку х64 и мультиплатформенность.
Цитата:

Сообщение от Iron Man (Сообщение 983496)
По мере вникания в Delphi, начинаю делать выводы, что она (он) мне нравится все больше и больше!

Ещё бы :)

Iron Man 26.10.2010 00:28

Цитата:

Сообщение от SpellCaster (Сообщение 983662)
мультиплатформенность.

Вот это было бы просто охренительно.

SpellCaster 26.10.2010 19:14

Iron Man, а то! Но пока что довольствуемся Lazarus либо Wine :)
К сожалению, FPC в плане языка уже сто лет не развивается, поэтому многих вкусных фишек, введённых в Delphi за последние годы, в нем не будет :(

Gligarr 26.10.2010 19:19

Эх... Нас в университете пока учат только Turbo Pascal'ем пользоваться, но ребята со старших курсов рекомендуют больше внимания уделять CИ++. Может кто подсказать какую-нибудь литературу о пользовании оным?

Iron Man 26.10.2010 19:37

Цитата:

Сообщение от Gligarr (Сообщение 984084)
Эх... Нас в университете пока учат только Turbo Pascal'ем пользоваться, но ребята со старших курсов рекомендуют больше внимания уделять CИ++. Может кто подсказать какую-нибудь литературу о пользовании оным?

С++ за 21 день, С++ для начинающих (Герберт Шилдт, издательство шаг за шагом).

Дельфи, по сути, тот же Паскаль.

SpellCaster 28.10.2010 12:06

Цитата:

Сообщение от Gligarr (Сообщение 984084)
Может кто подсказать какую-нибудь литературу о пользовании оным?

Читай классику: Бьярн Страуструп, собственно создатель плюсов. О простых сях можно почитать опять же создателей - Кернигана и Ритчи.

Vollmond 01.11.2010 16:26

Цитата:

Сообщение от SpellCaster (Сообщение 985261)
Читай классику: Бьярн Страуструп, собственно создатель плюсов.

У него после чтения одного введения мозги из ушей текут. :(

Gligarr, рекомендую Харви Дейтл и Пол Дейтл - "Как программировать на C++?". Доходчиво объясняется все с самых азов, в конце каждой главы куча упражнений для тренировки, параллельно в первых главах идет введение в ООП на "человеческом языке", так сказать.

Iron Man 01.11.2010 17:27

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

SpellCaster 01.11.2010 23:08

Пожалуй, что и так. Я-то читал его уже кое-как зная Си. В принципе можно начинать с любой более-менее популярной книги. Ну а Си изучать лучше, уже имея в запасе знание другого ЯП.

Iron Man 15.11.2010 21:01

Поставил себе Эмбаркодеровскую РЭД студио последнюю) буду заценивать:)

SpellCaster, ты ее сейчас юзаешь?

SpellCaster 15.11.2010 22:16

Если ты про ХЕ, то нет, я на 2010й. ХЕ особо ничем не отличается, а 2010я у нас купленная :)

Iron Man 15.11.2010 22:39

Цитата:

Сообщение от SpellCaster (Сообщение 998780)
Если ты про ХЕ, то нет, я на 2010й. ХЕ особо ничем не отличается, а 2010я у нас купленная :)

Вот эта вот

Iron Man 04.04.2011 19:03

Ламерский вопрос, который почему-то только что пришел мне в голову: кто знает как открепить форму в Embarcadero Rad Studio? То есть, чтобы ее можно было свободно елозить как в Delphi 7?

http://s41.radikal.ru/i091/1104/00/37eb30533ede.png

SpellCaster 05.04.2011 12:13

Как настроить Delphi 2010, чтобы она выглядела как Delphi 7

Gligarr 20.04.2011 22:11

Требуется помощь в нахождении ошибки.
Вкратце объясняю поставленную задачу. Надо создать бинарный файл, внести в него некоторые данные (работа ведется посредством структур), потом открыть его, внести еще данные, и напоследок поработать с даннными из файла (за последнее пока не брался). Всё это надо реализовать с помощью функций.
Скрытый текст - Вот, то что было сделано:
[PHP]#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
struct luggage {char name[20]; int number; float weight;}t1;
void create(FILE *); //Создание нового файла
void open(FILE *); //Открытие файла
void add(FILE *); //Добавление в файл
void delete10(FILE *); //Удаление данных о пассажирах с багажом меньше чем 10
main()
{
char c;
FILE *tf;
while(1)
{
puts("1 - New File");
puts("2 - Open File");
puts("3 - Add to File");
puts("4 - Delete info about passengers with weight of luggage less then 10 kilo");
puts("0 - Exit");
c=getch();
switch(c)
{
case'1': create(tf); break;
case'2': open(tf); break;
case'3': add(tf); break;
case'4': delete10(tf); break;
case'0': return 0;
default: puts("Error!");
}
}
}
void create(FILE *tf)
{
char ch;
tf=fopen("lug.dat", "wb");
printf("\n Entering data \n");
do
{
printf("\n Surname: \n");
scanf("%s",t1.name);
printf("\n Number of items: \n");
scanf("%d",t1.number);
printf("\n The total weight of luggage: \n");
scanf("%f",t1.weight);
fwrite(&t1,sizeof(t1),1,tf);
printf("\n Finish? y/n ");
getch();
}
while(ch!='y');
fclose(tf);
}
void open(FILE *tf)
{
int i;
tf=fopen("lug.dat","rb");
i=1;
fread(&t1,sizeof(t1),1,tf);
while(!feof(tf))
{
printf("\n %3d Name %20s with %2d items has %6.2f kilo of luggage \n",i,t1.name,t1.number,t1.weight);
fread(&t1,sizeof(t1),1,tf);
i++;
}
getch();
}
void add(FILE *tf)
{
char ch;
tf=fopen("lug.dat","ab");
printf("\n Entering data \n");
do
{
printf("\n Surname: \n");
scanf("%s",t1.name);
printf("\n Number of items: \n");
scanf("%d",t1.number);
printf("\n The total weight of luggage: \n");
scanf("%f",t1.weight);
fwrite(&t1,sizeof(t1),1,tf);
printf("\n Finish? y/n ");
ch=getch();
}
while(ch!='y');
fclose(tf);
}
void delete10(FILE *tf)
{
//Здесь однажды появится код...
}[/PHP]

И вот теперь о проблеме. При вводе значения веса багажа (или после ввода количества) программа вылетает... Обнаружить косяк в программе не могу, сколько ни пытаюсь. Может кто чего подскажет, где здесь ошибка?

Waterplz 21.04.2011 09:43

Цитата:

while(1)
ололо

не связано с главной проблемой, но
[PHP]void create(FILE *tf)
{
char ch;
...
getch(); // должно быть ch = getch();
//В void open(FILE *tf) даже переменная под это не декларирована
...
while(!feof(tf))
{
printf("\n %3d Name %20s with %2d items has %6.2f kilo of luggage \n",i,t1.name,t1.number,t1.weight);
fread(&t1,sizeof(t1),1,tf);
i++; //должен использоваться для перемешения указателя tf скачками длиной в t1
}[/PHP]

SpellCaster 21.04.2011 11:30

Цитата:

Сообщение от Waterplz (Сообщение 1102997)
ололо

Да ладно, нормальная конструкция
Цитата:

Сообщение от Gligarr (Сообщение 1102825)
При вводе значения веса багажа (или после ввода количества) программа вылетает... Обнаружить косяк в программе не могу, сколько ни пытаюсь

Пошаговая отладка что показывает? На какой строчке вылетает?

Кроме того,
Цитата:

getch();
}
while(ch!='y');
-> тут никак не выйдешь из цикла

Waterplz 21.04.2011 11:35

Цитата:

Пошаговая отладка что показывает? На какой строчке вылетает?
Я так понял что:
Цитата:

При вводе значения веса багажа (или после ввода количества) программа вылетает...

SpellCaster 21.04.2011 14:41

Waterplz, ну, по написанному можно только судить, после каких действий она вылетает, а ведь это не одно и то же.
Если на scanf("%f",t1.weight); - это одно дело, а если на fwrite(&t1,sizeof(t1),1,tf); - другое. Кстати, точно ли нужно &t1, а не *t1? Я уже подзабыл это сишное безумие с указателями/ссылками.
Да, и как она вылетает-то? Вроде как должно быть некое сообщение об ошибке.

Waterplz 21.04.2011 15:17

Цитата:

Кстати, точно ли нужно &t1, а не *t1?
Точно. t1 это структура, &t1 даст адрес этой структуры, что нам и нужно. А *t1 выдал бы содержимое t1, будь t1 указателем.

Gligarr 21.04.2011 16:55

Цитата:

Сообщение от Waterplz (Сообщение 1102997)
 while(!feof(tf)) 
    { 
     printf("\n %3d Name %20s with %2d items has % 6.2f kilo of luggage \n",i,t1.name,t1.number,t1.we ight); 
     fread(&t1,sizeof(t1),1,tf); 
     i++; //должен использоваться для перемешения указателя tf  скачками длиной в t1
    } 

Об этом поподробнее, пожалуйста, ведь по сути операция должна выполнятся верно...

Цитата:

Сообщение от SpellCaster (Сообщение 1103172)
Да, и как она вылетает-то? Вроде как должно быть некое сообщение об ошибке.

Программа сперва зависает, а потом Windows выдает сообщение о том, что программа не отвечает и т.д. и т.п.
А вот с отладкой до сих пор не могу разобраться - использую Dev-C++, а отладчик там какой-то непонятный. Вроде пробегаю по строкам, но вот ничего толком он не выдает...

Так, решил проверить первую функции отдельно:

Скрытый текст - Открытие файла для записи:
[PHP]#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
main()
{
struct luggage {char name[20]; int number; float weight;}t1;
char ch;
FILE *tf;
tf=fopen("lug.dat", "wb");
printf("\n Entering data \n");
do
{
printf("\n Surname: \n");
scanf("%s",t1.name);
printf("\n Number of items: \n");
scanf("%d",t1.number);
printf("\n The total weight of luggage: \n");
scanf("%f",t1.weight);
fwrite(&t1,sizeof(t1),1,tf);
printf("\n Finish? y/n ");
ch=getch();
}
while(ch!='y');
fclose(tf);
return 0;
}
[/PHP]


Вылетает уже после ввода веса багажа (Weight), причем во время отладки выдает ошибку "Ваша программа вызвала нарушение доступа (ошибка сегментации)". Подозреваю баг связан со строчкой fwrite(&t1,sizeof(t1),1,tf);

SpellCaster 21.04.2011 17:11

Цитата:

Сообщение от Waterplz (Сообщение 1103200)
t1 это структура, &t1 даст адрес этой структуры, что нам и нужно. А *t1 выдал бы содержимое t1, будь t1 указателем

Не... там же вроде как * и при взятии адреса, и при разыменовании указателя, только местами меняется. А ссылка особняком стоит.

Gligarr, ну ты даешь, блин! Между "Зависает" и "Вылетает" - огромная разница! И разные причины бага.
Тем не менее, всё-таки выясни строчку. Это можно сделать, поставив после каждой строчки вывод чего-нибудь на консоль. Я обычно делаю так (псевдокод):

int step = 0;
...do smth...
writeln(step++);
...do smth...
writeln(step++);
...do smth...
writeln(step++);

- это сразу покажет, на каком моменте затык

Gligarr 21.04.2011 17:28

SpellCaster, попробовал так проверить. Сбой происходит при выполнении команды (!) scanf("%f",t1.weight);
Теперь вот думаю, к чему бы это... Ведь получается программа просто не может по какой-то причине принять ввод значения с клавиатуры...

Upd, всё разобрался, походу нужен имперсант...

Всё, основная программа теперь заработала как надо! Вся ошибка заключалась в том что ввод с клавиатуры уходил по сути "в никуда"... Да, это была глупая ошибка с моей стороны не расставить знак & перед численными значениями из структур)

Waterplz 22.04.2011 11:54

Цитата:

Об этом поподробнее, пожалуйста, ведь по сути операция должна выполнятся верно...
у тебя tf не изменяется. то есть этот цикл у тебя или выполниться 0 раз (при пустом файле), или будет бесконечным.

Gligarr 22.04.2011 20:10

Цитата:

Сообщение от Waterplz (Сообщение 1103919)
то есть этот цикл у тебя или выполниться 0 раз (при пустом файле), или будет бесконечным.

Ну в данной функции у меня программа работает без проблем. Выполнение идёт, так как в процедуре fread прописываются и шаг перехода "sizeof(t1)" и число элементов "1" (то есть одна структура). Поэтому, ошибки здесь, думаю, нет.

А вот здесь почему то не получается удалить структуру... Как раз переходит или в бесконечный цикл, или не даёт нужного эффекта.
Баг происходит после нажатия клавиши "Y", если верить отладчику...
Вообще, как можно организовать удаление определенной структуры?

Скрытый текст - Удаление структур с t1.weight<10:
[PHP]void delete10(FILE *tf)
{
char ch;
int i=0,n=0;
tf=fopen("lug.dat","rb+");
while(!feof(tf))
{
fread(&t1,sizeof(t1),1,tf);
if(t1.weight<10)
{
printf("\n Luggage of %s weighs less then 10. Delete data about %s? y/n \n", t1.name, t1.name);
ch=getch();
if(ch=='y')
{
fseek(tf,-sizeof(t1),SEEK_CUR);
fwrite(&n,1,sizeof(t1),tf);
fclose(tf);
}
}
}
}[/PHP]


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

Вот программа целиком:

Скрытый текст - Программа:
[PHP]#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
struct luggage {char name[20]; int number; float weight;}t1;
void create(FILE *);
void open(FILE *);
void add(FILE *);
void delete10(FILE *);
main()
{
char c;
FILE *tf;
while(1)
{
puts("1 - New File");
puts("2 - Open File");
puts("3 - Add to File");
puts("4 - Delete info about passengers with weight of luggage less then 10 kilo");
puts("0 - Exit");
c=getch();
switch(c)
{
case'1': create(tf); break;
case'2': open(tf); break;
case'3': add(tf); break;
case'4': delete10(tf); break;
case'0': return 0;
default: puts("Error!");
}
}
}
void create(FILE *tf)
{
char ch;
tf=fopen("lug.dat", "wb");
printf("\n Entering data \n");
do
{
printf("\n Surname: \n");
scanf("%s",t1.name);
printf("\n Number of items: \n");
scanf("%d",&t1.number);
printf("\n The total weight of luggage: \n");
scanf("%f",&t1.weight);
fwrite(&t1,sizeof(t1),1,tf);
printf("\n Finish? y/n \n");
ch=getch();
}
while(ch!='y');
fclose(tf);
}
void open(FILE *tf)
{
int i;
tf=fopen("lug.dat","rb");
i=1;
fread(&t1,sizeof(t1),1,tf);
while(!feof(tf))
{
printf("\n %3d Name %20s with %2d items has %6.2f kilo of luggage \n",i,t1.name,t1.number,t1.weight);
fread(&t1,sizeof(t1),1,tf);
i++;
}
getch();
}
void add(FILE *tf)
{
char ch;
tf=fopen("lug.dat","ab");
printf("\n Entering data \n");
do
{
printf("\n Surname: \n");
scanf("%s",t1.name);
printf("\n Number of items: \n");
scanf("%d",&t1.number);
printf("\n The total weight of luggage: \n");
scanf("%f",&t1.weight);
fwrite(&t1,sizeof(t1),1,tf);
printf("\n Finish? y/n \n");
ch=getch();
}
while(ch!='y');
fclose(tf);
}
void delete10(FILE *tf)
{
char ch;
int i=0,n=0;
tf=fopen("lug.dat","rb+");
while(!feof(tf))
{
fread(&t1,sizeof(t1),1,tf);
if(t1.weight<10)
{
printf("\n Luggage of %s weighs less then 10. Delete data about %s? y/n \n", t1.name, t1.name);
ch=getch();
if(ch=='y')
{
fseek(tf,-sizeof(t1),SEEK_CUR);
fwrite(&n,1,sizeof(t1),tf);
fclose(tf);
}
}
}
}

[/PHP]

SpellCaster 22.04.2011 23:30

Цитата:

Сообщение от Gligarr (Сообщение 1104095)
Вообще, как можно организовать удаление определенной структуры?

Ууу, брат. Удаление из/добавление в середину в файлах делается только с копированием остального хвоста файла. То есть в случае удаления тебе надо делать так:
1) Прочитать структуру t1
2) Проверить условия, спросить
3) Если удовлетворяет условию, цикл:
* Прочитать следующую структуру t2
* Переместиться на 2*SizeOf(luggage) назад (потому что к этому моменту указатель в файле будет у начала второй структуры после удаляемой t1 - назовем ее t3)
* Записать в текущее место t2
* Переместиться на SizeOf(luggage) вперед
* Повторить цикл
5) В конце обрезать файл на SizeOf(luggage) байт

То есть, проще говоря, по кусочкам "подтащить" структуры, заполнив свободную ячейку в файле

Что же касается твоего кода "Удаление структур с t1.weight<10", то ты там вообще что-то непонятное творишь. В случае утвердительного ответа перезаписываешь структуру, которую надо удалять, причем на ту же позицию, где она и есть в файле, а потом еще и зачем-то закрываешь файл

Sofist 24.07.2011 14:55

Цитата:

Сообщение от SpellCaster (Сообщение 1104280)
То есть, проще говоря, по кусочкам "подтащить" структуры, заполнив свободную ячейку в файле

обсуждение было давно, но предлагаю другой вариант:
1) добавить в структуру поле bool deleted, по умолчанию присваивать false
2) при согласии пользователя на удаление структуры, менять её в true
3) вывод и обработку производить только если !deleted
4) создать отдельную утилитку, которая будет:
4.1) читать структуры исходного файла
4.2) если !deleted записывать их во временный
4.3) по окончании, проверить, что временный файл существует и непуст
4.4) если это так, то переместить исходный файл в архив, а временный переименовать в исходный
5) запускать эту утилитку, скажем, еженедельно

SpellCaster 25.07.2011 15:25

Это всё, конечно, верно, но для случая реального применения. А тут, вроде бы, была лаба.


Текущее время: 21:28. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.