Wake of Gods Forum | Форум Во Имя Богов
нужна помощь по программированию - Printable Version

+- Wake of Gods Forum | Форум Во Имя Богов (http://wforum.heroes35.net)
+-- Forum: Общие Форумы (/forumdisplay.php?fid=100)
+--- Forum: Софт и железо (/forumdisplay.php?fid=137)
+--- Thread: нужна помощь по программированию (/showthread.php?tid=810)


нужна помощь по программированию - izrukvruki - 06.08.2009 18:30

Есть система вложенных папок:

D:\Folder1\Folder101\files1011.txt
D:\Folder1\Folder101\files1012.txt
....
D:\Folder1\Folder102\files1021.txt
D:\Folder1\Folder102\files1022.txt
...
D:\Folder2\Folder201\files2011.txt
D:\Folder2\Folder201\files2012.txt
....
D:\Folder2\Folder202\files2021.txt
D:\Folder2\Folder202\files2022.txt
...

Можно создать текстовый файл, который будет содержать данный список файлов?


RE: нужна помощь по программированию - GrayFace - 06.08.2009 19:05

Помотри, подойдет ли tree /f >list.txt

Прогу надо на любом языке?


RE: нужна помощь по программированию - Дьякон - 06.08.2009 20:13

Т.е. нужно пройти по всему диску? Или какие-то определенные папки?
Если не определенные, то рекурсивный перебор всех каталогов. На Делфи - 20-30 строчек проги. Делфи подходит?


RE: нужна помощь по программированию - izrukvruki - 06.08.2009 21:17

(06.08.2009 19:05)GrayFace Wrote:  Помотри, подойдет ли tree /f >list.txt

Прогу надо на любом языке?

команда выдает дерево...
Quote:├───Архивы
├───День выборов
│ 01 - А. Кортнев - Выбора.mp3
│ 02 - Чайф - Романс Об Избирательной Урне.mp3
│ 03 - Группа Исполнителей - Казачья.mp3
│ 04 - Uma2rman - Трансвестит Машка.mp3
│ 05 - Серёга - Воровская.mp3
│ 06 - Би2 - Ночной Ларёк.mp3
│ 07 - Иванушки International - Учительница.mp3
│ 08 - Князева Лена - Кричать Без Крика.mp3
│ 09 - Чайф - Куплеты.mp3
│ 10 - М. Башаров, Д. Певцов, Е. Стычкин, О. Фомин - Стоматологи.mp3
│ 11 - Валерий Сюткин - Твист.mp3
│ 12 - А. Макаревич, Г. Мартиросьян - Снежинка.mp3
│ 13 - Ансамбль Карагод - Народная.mp3
│ 2007 - День выборов.jpg
но мне бы полный путь к файлу...
типо D:\Folder1\Folder101\files1011.txt

Паскаль наверное подойдет, мне вообше бы откомпилировать прогу (у меня щас нету никаких языков программирования на компе - VisualBasic есть из Офиса и КорелДрав) и какой нибудь ини-файл для параметров...

Дьякон, нужно "просканировать" конкретную папку, включая все ее подпапки. Весь диск не нужно.


RE: нужна помощь по программированию - Berserker - 06.08.2009 21:23

Команда CTRL+B в тотал командере, правда там без полных путей


RE: нужна помощь по программированию - izrukvruki - 06.08.2009 21:28

нет. это мне Берс не поможет.

Мне список нужен, по которому другая прога будет работать...


RE: нужна помощь по программированию - Berserker - 06.08.2009 21:36

Если не опередят, напишу сегодня.


RE: нужна помощь по программированию - izrukvruki - 06.08.2009 22:12

Буду очень признателен...

Суть в следующем, есть папки (их очень много, папка Месяц, с подпапками Число (Июнь\Июнь_01, Июнь\Июнь_02) в которых лежат файлы CorelDraw версии 7 (ну или например файлы Ворда (с разрешением doc). Мне их ВСЕ нужно открыть и пересохранить в версии 10 (для Ворда например сохранить в формате docx). Руками это очень утомительно, я сделал что CorelDraw пересохраняет все открытые файлы (т.е. сначало открыть все файлы из директории, запустить макрос, он будет сохранять и закрывать - но этот способ плох тем, что сразу открыть много рекламы (некоторые имеют объем под 100 мб) компьютеры не позволяют, зависают, открывать по одной более правильно.


RE: нужна помощь по программированию - Berserker - 06.08.2009 22:50

Вот тестовый результат:
...


RE: нужна помощь по программированию - izrukvruki - 06.08.2009 23:18

спасибище.


RE: нужна помощь по программированию - Corwin - 06.08.2009 23:36

А можно полюбопытствовать - а зачем пересохранять файлы в новой версии?


RE: нужна помощь по программированию - izrukvruki - 07.08.2009 00:16

До сих пор мы работаем в Win98 в CorelDraw7. Поскольку была необходимость докупить еще несколько лицензий CorelDraw, купили всем (чтоб все работали в одинаковой версии) CorelDraw Х3 (тогда было другую не купить), а он пашет не менее чем под WinXP (ну или наоборот можно сказать - купили WinXP и для него CorelDraw X3). Но еще мы используем старые шрифты Type1, в X3 они не все правильно работают, при открытии бывает что не отображает форматирование (жирноту), бывает что пропадают символы, или шрифт вообще заменялся). Но если делать макеты сразу в X3 то шрифты работают нормально, т.е. проблема возникает тогда когда пытамся открыть в X3 макеты сделанные в 7 версии. Решение нашли такое: 10 версия CorelDraw нормально открывает 7, а 13 нормально открывает 10, значит все макеты нужно пересохранить в версии 10, а потом работать с ними в 13 и далее уже сохранять в 13.

Не знаю, понятно ли я объяснил?


RE: нужна помощь по программированию - izrukvruki - 07.08.2009 10:36

Конечно понимаю, что это наглость, но нельзя ли немного усовершенствовать программу:
нельзя ли ввести третий параметр - расширение тех файлов которые нужно найти в папках...

Просто оказалось, что в папках всякого мусора дофига (там и jpg, и tif, и psd и пр.), а мне нужны файлы с расширением CDR...

Но если сложно то забейте - в ворде заменой найду...


RE: нужна помощь по программированию - Berserker - 07.08.2009 16:53

Не сложно, сделаю.


RE: нужна помощь по программированию - Berserker - 29.09.2010 01:26

Моя первая программа на СИ++. Сортировка массива строк.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define pointer *
#define deref *
#define nil 0

typedef char pointer pchar;

void ExchangeStrs (pchar &StrA, pchar &StrB)
{
  pchar StrC = StrB;
  StrB = StrA;
  StrA = StrC;
}

void SortStrArr (pchar Arr[], int ArrSize)
{
  int MiddleItemInd = -1;
  pchar MiddleItem = nil;
  int LeftInd = 0;
  int RightInd = ArrSize - 1;
  /***/
  if (ArrSize == 2)
  {
    if (strcmp(Arr[0], Arr[1]) >= 0)
    {
      ExchangeStrs(Arr[0], Arr[1]);
    }
  }
  else if (ArrSize > 2)
  {
    MiddleItemInd = ArrSize / 2;
    MiddleItem = Arr[MiddleItemInd];
    while (LeftInd <= RightInd)
    {
      if (strcmp(Arr[LeftInd], MiddleItem) >= 0)
      {
        ExchangeStrs(Arr[LeftInd], Arr[RightInd]);
        RightInd--;
      }
      else
      {
        LeftInd++;
      }
    }
    SortStrArr(&Arr[0], (RightInd + 1));
    SortStrArr(&Arr[LeftInd], (ArrSize - LeftInd));
  }
}

int main (int argc, pchar args[])
{
  const int ARR_SIZE = 5;
  pchar strs[ARR_SIZE] = {"ccc", "bbb", "aaa", "ddd", "hello"};
  SortStrArr(strs, ARR_SIZE);
  for (int i = 0; i < ARR_SIZE; i++)
  {
    printf("%s\n", strs[i]);
  }
}



RE: нужна помощь по программированию - ZVS - 29.09.2010 02:00

А чего qsort не использовал для сортировки?


RE: нужна помощь по программированию - Berserker - 29.09.2010 02:07

Смысл был ознакомиться с языком и работой со ссылками и указателями. Решил сделать алгоритм сортировки строк. Естественно, стандартная библиотека скорее всего содержит почти все привычные функции.
Добавлено:
Кое-что пока не ясно. Создал .h-файл без .cpp-аналога, подключил его, но компилятор в упор его не видит:
#include <GeneralUnit.h>
...
4 C:\Dev-Cpp\Examples\Hello\Hello.cpp GeneralUnit.h: No such file or directory.


RE: нужна помощь по программированию - ZVS - 29.09.2010 02:16

Тогда по мелочи еще пара вопросов.
1. Зачем менять указатели, если if (strcmp(Arr[LeftInd], MiddleItem) == 0), просто лень отделить было?
2. Зачем скобки в вызовах типа SortStrArr(&Arr[0], (RightInd + 1)); на всякий случай?
Добавлено:
(29.09.2010 02:07)Berserker Wrote:  Кое-что пока не ясно. Создал .h-файл без .cpp-аналога, подключил его, но компилятор в упор его не видит:
#include <GeneralUnit.h>
...
А если так:
#include "GeneralUnit.h"


RE: нужна помощь по программированию - Berserker - 29.09.2010 02:20

Quote:1. Зачем менять указатели, если if (strcmp(Arr[LeftInd], MiddleItem) == 0), просто лень отделить было?
Машинально при правке поставил. Первоначально было > 0.

Quote:2. Зачем скобки в вызовах типа SortStrArr(&Arr[0], (RightInd + 1)); на всякий случай?
Логически выделил. Зрительно проще воспринимаю выражения так.

Хочу попробовать с классами поработать, написать аналог строк в Делфи со всякими умными фишками, но пока не понимаю, могут ли существовать заголовочные файлы без cpp-аналогов или пусть даже пустой плюсовый файл, но обязателен?


RE: нужна помощь по программированию - ZVS - 29.09.2010 02:23

Ясный перец могут. Они вообще никак не связаны для компилятора. Плюсовый фай абсолютно не обязателен.


RE: нужна помощь по программированию - Bourn - 29.09.2010 02:25

почитай про темплейты - очень полезно 118


RE: нужна помощь по программированию - ZVS - 29.09.2010 02:26

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


RE: нужна помощь по программированию - Berserker - 29.09.2010 02:30

Quote:Ясный перец могут. Они вообще никак не связаны для компилятора. Плюсовый фай абсолютно не обязателен.
Я так и думал, спасибо.


RE: нужна помощь по программированию - ZVS - 29.09.2010 02:31

Ну попробовал?


RE: нужна помощь по программированию - Berserker - 29.09.2010 02:40

Да. BloodShed Dev-C++ (включает в себя gcc с mingw) пишет, что без понятия, где файл. Добавил директорию проекта в список подключаемых. Нулевой эффект. Не принимает файл "GeneralUnit.h" хоть убей, а StringUnit.cpp нормально включается в проект.
Добавлено:
Code:
Êîìïèëÿòîð: Default compiler
Building Makefile: "C:\Dev-Cpp\Examples\Hello\Makefile.win"
Âûïîëíåíèå  make...
make.exe -f "C:\Dev-Cpp\Examples\Hello\Makefile.win" all
g++.exe -D__DEBUG__ -c Hello.cpp -o Hello.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Dev-Cpp/include/c++/3.4.2/backward"  -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Dev-Cpp/include/c++/3.4.2"  -I"C:/Dev-Cpp/include"    -g3

Hello.cpp:4:25: GeneralUnit.h: No such file or directory
Hello.cpp:6: error: `pointer' does not name a type
Hello.cpp:8: error: variable or field `ExchangeStrs' declared void
Hello.cpp:8: error: `pchar' was not declared in this scope
Hello.cpp:8: error: `StrA' was not declared in this scope
Hello.cpp:8: error: `pchar' was not declared in this scope
Hello.cpp:8: error: `StrB' was not declared in this scope

Hello.cpp:9: error: initializer expression list treated as compound expression

Hello.cpp:9: error: expected `,' or `;' before '{' token
Hello.cpp:15: error: variable or field `SortStrArr' declared void
Hello.cpp:15: error: `pchar' was not declared in this scope
Hello.cpp:15: error: expected primary-expression before "int"
Hello.cpp:16: error: initializer expression list treated as compound expression
Hello.cpp:16: error: expected `,' or `;' before '{' token
Hello.cpp:50: error: `pchar' has not been declared
Hello.cpp:51: error: ISO C++ forbids declaration of `args' with no type
Hello.cpp: In function `int main(int, int*)':
Hello.cpp:53: error: `pchar' undeclared (first use this function)
Hello.cpp:53: error: (Each undeclared identifier is reported only once for each function it appears in.)
Hello.cpp:53: error: expected `;' before "strs"
Hello.cpp:54: error: `strs' undeclared (first use this function)
Hello.cpp:54: error: `SortStrArr' cannot be used as a function

make.exe: *** [Hello.o] Error 1



RE: нужна помощь по программированию - ZVS - 29.09.2010 02:44

Ну попробуй включить с полным путем. Если заработает ищи настройки умолчательного пути к каталогу инклудов. Если нет - выброси свой dev-c++
Добавлено:
По правилам C++ при включении файла в "" он ищется в папке текущего проекта, а в <> ищется в каталоге стандартной библиотеки.
P.S. Ты бы лучше начало файла Hello.cpp поместил, а не полный лог.
P.S.S.
И какая из этих
-I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"
-I"C:/Dev-Cpp/include/c++/3.4.2/backward"
-I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"
-I"C:/Dev-Cpp/include/c++/3.4.2"
-I"C:/Dev-Cpp/include"
    директория твоего проекта?


RE: нужна помощь по программированию - Berserker - 29.09.2010 02:51

Quote:По правилам C++ при включении файла в "" он ищется в папке текущего проекта, а в <> ищется в каталоге стандартной библиотеки.
Сменил кавычки - ок.


RE: нужна помощь по программированию - Bourn - 29.09.2010 13:20

MSVC компилер - не найдет разницы между
#include <GeneralUnit.h>
#include "GeneralUnit.h"
хотя стоит придерживаться классики


RE: нужна помощь по программированию - ZVS - 30.09.2010 00:35

Вообще разница есть. Если совсем точно по стандарту, то "" вначале должен искаться в текущей папке и если не находится, то в системной, а <> наоборот в системной и если нет, то в текущей.
Поэтому кажется, что разницы нет. Но она есть. Создай в папке проекта stdio.h и посмотри какой файл будет включаться в <stdio.h> и "stdio.h". Сделано это, чтобы можно было в частности временно для проекта подменять стандартные библиотеки, не трогая оригинальные библиотечные файлы.
Кстати раньше MSVC не поддерживал стандарт полностью и искал только так как я написал раньше.


RE: нужна помощь по программированию - packa - 17.02.2011 21:43

Тема вроде подходящая, хотел спросить:
Может кто подсказать хорошую обучалку по с++?
То бишь проверенную, надежную.

Буду благодарен.


RE: нужна помощь по программированию - Tent - 17.06.2011 16:18

Кто-нибудь когда-нибудь сталкивался с линейным конгруэнтным методом генерации псевдослучайных чисел?
Есть задача, реализованная на паскале:
Code:
Program _1;
var
a,c:integer; n,i,m,x,xo:longint;

function f(x:longint):longint; {vichislenie znacheniya chlena posledovatelnosti}
begin
  f:=(a*x+c) mod m;
end;

function item(N:longint):longint; {vichislenire poslednego chlena posledovatelnosti}
begin
  x:=xo;
  for i:=1 to N do x:=f(x);
  item:=x;
end;

function Period(xx:longint):longint; {vischislenie perioda}
var q:byte;
begin
  q:=0;
  x:=xo;
  i:=0;
  repeat
   If x=xx then inc(q);
   x:=f(x);
   if q>0 then inc(i);
  until q=2;
  period:=i;
end;

Begin
writeln('vvedite kol-vo elementov');
readln(N);
xo:=5;
a:=4149;
m:=131074;
c:=27700;

writeln('x[',N,']= ',item(n));
writeln('It period is: ',period(item(n)));
readln;
End.
Требуется вычислить такие значения коэффициентов m,c,a, при которых период ГСПЧ будет наибольшим. Вернее, вычисленые-то они уже имеются, но это взято из интернетов, где ни глянь - везде пишут нечто вроде "данные значения коэффициентов вычислены различными исследователям и являются наиболее приемлемыми для генерации максимального периода". А мне надо доказать, что именно эти значения, а не другие. Соответственно, надо вычислить множество значений, визуализировать (построить график). Как - описывается во втором томе у Кнута, но для меня это крайне сложно и запутано. Может кто-нибудь сможет объяснить более доступно? Буду очень признателен


RE: нужна помощь по программированию - Berserker - 17.06.2011 16:32

В районе дней двух читал статью на хабре о ГПСЧ. Попробуй поискать.


RE: нужна помощь по программированию - Tent - 17.06.2011 17:30

Эта?
Если да - в ней нет ничего, что мне могло бы помочь.
Quote:— c и m должны быть взаимно простыми,
   — a-1 должно быть кратно p для всех простых делителей p числа m,
   — если m кратно 4 (а в нашем случае оно будет кратно), то и a-1 должно быть кратно 4.
На основании этих свойств можно вычислить и c и a (при условии если m взять равной, например, (2^32)-1), но для этого нужно брать просто огромнейшее количество значений c и a, и смотреть как при этом будет меняться период


RE: нужна помощь по программированию - gamecreator - 17.06.2011 20:30

(17.06.2011 17:30)Tent Wrote:  при условии если m взять равной, например, (2^32)-1
Думаю, ты имел в виду просто 2^32


RE: нужна помощь по программированию - izrukvruki - 28.11.2011 13:25

есть папка C:\temp

каждый день в ней создается подпапка (иногда создаем 2-3 подпапки, например в понедельник за сб и вс), куда мы скидываем служебные файлы,
Code:
....
\4000
\4001
\4002
....
\4038
папки старше месяца удаляем

Как можно получить номер самой свежей (не по дате создания, а по номеру) подпапки?
в данной ситуации это будет число 4038

мне это надо для одной процедуры в VisualBasic - для ворда

спасибо


RE: нужна помощь по программированию - izrukvruki - 28.11.2011 18:14

Решение на другом форуме мне подсказал Shaidar Haran.
Code:
LastFolder = ""

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\Temp")

For Each SubFolder In Folder.SubFolders
    If IsNumeric(SubFolder.Name) Then
        If (SubFolder.Name > LastFolder) Then LastFolder = SubFolder.Name
    End If
Next

MsgBox LastFolder



RE: нужна помощь по программированию - Efrit - 28.11.2011 19:28

Изрук, тут вряд ли кто знает VB, увы... Я вот, с ним вообще не знаком.


RE: нужна помощь по программированию - gamecreator - 26.09.2012 01:33

помогите выбрать структуру данных. суть такова:
сфера разделена на 8 равных треугольников (сферических). каждый тр-к рекурсивно (с заданной глубиной) разделен на 4 тр-ка. в процессе к 6 изначальным точкам добавляются новые точки на ребрах треугольника. таким образом точки являются общими для соседних треугольников. при этом в каждой точке есть параметр (случайное число), который не может быть получен отдельно для каждого треугольника при делении. в чем можно хранить эти параметры, чтобы можно было узнать параметры вершин произвольного треугольника?


RE: нужна помощь по программированию - Efrit - 26.09.2012 08:18

gamecreator Wrote:сфера разделена на 8 равных треугольников (сферических)
Эта фраза сломала мне мозг.

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


RE: нужна помощь по программированию - gamecreator - 26.09.2012 13:03

(26.09.2012 08:18)Efrit Wrote:  Эта фраза сломала мне мозг.
ну представь октаэдр натянутый на сферу
(26.09.2012 08:18)Efrit Wrote:  предполагаю, что тебе может помочь обычная агрегация через указатель ("родительский/дочерний")...
сложно будет отслеживать общие вершины. думаю, должно быть что-то проще.


RE: нужна помощь по программированию - GrayFace - 01.10.2012 05:30

Лучше представь бутылку Клейна, натянутую на сферу с ручкой Sm http://www.clker.com/cliparts/1/5/3/6/12375609491338902396pitr_Ball_icon.svg.med.png - проведи здесь линию экватора.
Ну а кроме этого ничё понять невозможно.
[edit] Появились мысли: храни у каждого треугольника 3 соседей (по часовой стрелке, например) и 3 параметра вершин, ну и детей, родителя, если нужен. При разбиении смотри по каждой стороне, разбит ли сосед. Если разбит, то находи в его списке соседей себя и копируй соответствующий параметр. А именно, бери параметр у среднего подтреугольника. У него вершины должны быть упорядочены, как соседи у родителя.


RE: нужна помощь по программированию - packa - 13.12.2012 23:06

Есть кто шарит по scheme?


RE: нужна помощь по программированию - gamecreator - 14.12.2012 17:58

вроде от Common Lisp не очень отличается, может помогу.