Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: FMeat
Дата сообщения: 16.01.2008 21:06
И не нужно! Достаточно смайлика!

Ещё вопрос:
как оформить вызов GetCurrentDirectory, если нужно удалить в ниже лежайшей папке файл (с помощью DeleteFile конечно)?
Т.е. DeleteFile (Текущая_Директория\XXX\XXX.avi)?

PS
Все имена директорий вымешленны. Все имена файлов искажены.
Автор: akaGM
Дата сообщения: 16.01.2008 21:30
FMeat
a как же rtfm, msdn почитать, ман покурить?


Цитата:
Все имена директорий вымешленны. Все имена файлов искажены.

а..., с этого надо было начинать...
боюсь, теперь вряд ли кто тебе здесь поможет... как же без настоящих имён? не...
Автор: FMeat
Дата сообщения: 16.01.2008 21:45
rtfm - рофл ту**ца форматни меня
msdn - маленький садист дырявит ногу
man курить - ну эт святое, только запах краски моего принтера табочёк перебивает.

Пожалуйста! Вот вам даже имя настоящие xxx\vazelin>all.mpg !
Автор: lhOsvald
Дата сообщения: 16.01.2008 23:23
Спасибо TheChampion & TeXpert.
за пример.

так это получается что запись ( ( sin(x) ) в квадрате ) это тоже самое что запись ( ( sin ) в квадрате )(x) )?

(Я извиняюсь, может я немного не адекватно изъясняюсь. Только изначально была большая формула в учебнике тригонометрии. И запись вышеуказанного фрагмента была типа след: sin в квадрате X + cos в кадрате X).

Добавлено:
Автор: TheChampion
Дата сообщения: 17.01.2008 02:10
lhOsvald
Да, sin2 x == (sin x)2.

Или, в нотации TeX:
Код: \sin^2 x \equiv (\sin x)^2
Автор: TeXpert
Дата сообщения: 17.01.2008 02:22
lhOsvald
Цитата:
...запись вышеуказанного фрагмента была типа след: sin в квадрате X + cos в кадрате X
Быть не может такого в
Цитата:
...учебнике тригонометрии
Хоть бы минус, что ли, поставил. Извинения за офтоп.
Автор: TheChampion
Дата сообщения: 17.01.2008 03:57
TeXpert
Почему не может быть? По-моему, учебник тригонометрии самое место, чтобы писать $\sin^2 x + \cos^2 x \equiv 1$. Человек же пишет "запись фрагмента".
Автор: Qraizer
Дата сообщения: 17.01.2008 19:22
akaGM

Цитата:
что мы, звери что ли?
хотя, судя по тому как человек воспринимает твои разъяснения, зверь -- это ты, нам такое предлагая...
Хьюдж! и ни сегментом меньше...
ещё раз гы

Ну, large я привёл для примера, причём вполне осознано, т.к. эту модель сама IDEя предлагает по дефолту. Как раз, чтоб поменьше зверствовать пришлось.
А что собственно не понравилось в моём предложении? Я б и сам помог - нашёл, пропатчил, компильнул, засунул, подробненько описал по шагам. Сам когда-то так и поступил. Тока нету у меня этой древности. Есть 4.5, но он без RTL, так что тут без IDAы и hiew не обошлось. Предлагать такой вариант - это уже не зверство, а контрольный выстрел.
Автор: akaGM
Дата сообщения: 17.01.2008 19:46
Qraizer

Цитата:
А что собственно не понравилось в моём предложении?

положительно, я не умею шутить...

Цитата:

akaGM
хотя, судя по тому как человек воспринимает твои разъяснения...

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

и кстати, разве в rtl c0x.asm прилагались? так ему ещё и tasm'ом компилить их придётся...
вообще контрольный из базуки...


Автор: lhOsvald
Дата сообщения: 17.01.2008 20:32
еще раз Спасибо за помощь!!! TheChampion & TeXpert
Автор: An4eus
Дата сообщения: 18.01.2008 10:46
Qraizer
akaGM

код верный...
вот даже вот такой не работает!
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

void main()
{
    int driver,mode,errorcode;
    register int i;
    clrscr();

    initgraph(&driver,&mode,"c:\bc\bgi");
    errorcode=graphresult();
    if(errorcode!=grOk)
    {
        printf("Error:%s\n",grapherrormsg(errorcode));
        printf("Press any key...");
        getch();
        exit(1);
    }
}


а что ставить я так и не понял!
Просто с С занимался 11 лет назад и мало что помню!
Сейчас только вообще в 1С пишу...

Кстати, в коде даже не писал путь к библиотекам, ставил просто - "". Но все аналогично....
Прошу вашей помощи помогите. Пишу не себе, а другу. Хотя сам и не пойму почему не на Builder C++ ?!

Да, вот ещё... сама прога Borland C++ v. 3.1 _http://rapidshare.com/files/84704882/BC_31.rar.html
Автор: akaGM
Дата сообщения: 18.01.2008 13:46
An4eus

Цитата:
код верный...

очень я в этом сомневаюсь...

Код:
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

void main()
{
int driver,mode,errorcode;
register int i;
clrscr();

driver = DETECT;

initgraph(&driver,&mode,"c:\\bc\\bgi");
Автор: Qraizer
Дата сообщения: 18.01.2008 19:47
akaGM
Цитата:
и кстати, разве в rtl c0x.asm прилагались? так ему ещё и tasm'ом компилить их придётся...
Вообще-то прилагались. Только они тут ни при чём. Не в них дело, а в некоторой #pragma startup функции, которая используется библиотеками для выполнения инициализации перед main(). Упомянутые тобой асмовые стратеры вызвают все такие #pragma startup функции в Initialize, которая proc near, используя косвенные вызовы.
Вот пример. У тебя есть
Код: class A
{
/* ... */
public:
A(int x){/* ... */}
/* ... */
};

A a(123);
Автор: akaGM
Дата сообщения: 18.01.2008 21:34
Qraizer
ок, боле-мене...

интересно что/как там патчуется, loop холостой из nop'ов гы,
или всё-таки сорс править надо?

кстати, как паллиатив, от conio там можно всё-таки отказаться...

Автор: An4eus
Дата сообщения: 19.01.2008 13:08
akaGM, спасибо большое - разобрался. Нужно было писать \\, а не \.
А по ссылке лежат установочные дискеты BC++ v. 3.1
Автор: jck
Дата сообщения: 19.01.2008 14:34
Люди помогите плиззззз!!!! Переведите с Паскаля на borland с++ builder!!!

[more]
{ * * * Sea Battle - console version. By Akatov Aleksej, 2004 year. * * * }

uses CRT;

type TPole = array[1..10,1..10] of ShortInt;
var Pole: TPole;

procedure Init (var Pole: TPole);
var X, Y: Integer;
begin
Randomize;
for X := 1 to 10 do
for Y := 1 to 10 do
Pole[X,Y] := -1;
end; {proc Init}

function Freedom (x, y: Integer; Pole: TPole): Boolean;
const d: array[1..8,1..2] of Integer =
((0,1),(1,0),(0,-1),(-1,0),(1,1),(-1,1),(1,-1),(-1,-1));
var i: Integer;
dx, dy: Integer;
begin
if (x > 0) and (x < 11) and (y > 0) and (y < 11) and (Pole[x,y] = -1) then
begin
for i := 1 to 8 do
begin
dx := x + d[i,1];
dy := y + d[i,2];
if (dx > 0) and (dx < 11) and (dy > 0) and (dy < 11) and (Pole[dx,dy] > -1) then
begin
Freedom := False;
Exit;
end; {if}
end; {for}
Freedom := True;
end else Freedom := False;
end; {func Freedom}

procedure Ships (var Pole: TPole);
var N, M, i: Integer;
x, y, kx, ky: Integer;
B: Boolean;
begin
Init (Pole);
for N := 3 downto 0 do
for M := 0 to 3 - N do
repeat
x := Random (10) + 1;
y := Random (10) + 1;
kx := Random (2);
if kx = 0 then ky := 1
else ky := 0;
B := True;
for i := 0 to N do
if not Freedom (x + kx * i, y + ky * i, Pole) then B := False;
if B then
for i := 0 to N do
Pole[x+kx*i,y+ky*i] := 0;
until B;
end; {proc Ships}

var Play: TPole;
Kor: array[1..4] of Integer;
State: Integer;
Len: Integer;
Pkx, Pky: Integer;
Px, Py: Integer;

procedure Start;
var I: Integer;
begin
Init (Play);
Ships (Pole);
State := 1;
for I := 1 to 4 do
Kor[I] := 5 - I;
end; {proc Start}

function Killed (x, y: Integer): Boolean;
var K: Char;
begin
Write (Char (y + 64), x, ' (y/n)? ');
repeat
K := ReadKey;
if K = #27 then Halt (0);
until K in ['y','Y','n','N'];
WriteLn (K);
if (K = 'y') or (K = 'Y') then Killed := True
else Killed := False;
end; {func Killed}

function MaxShip: Integer;
var i: Integer;
begin
for i := 1 to 4 do
if Kor[i] > 0 then MaxShip := i;
end; {func MaxShip}

function GameOver: Boolean;
var I: Integer;
begin
for I := 1 to 4 do
if Kor[I] > 0 then
begin
GameOver := False;
Exit;
end; {if}
GameOver := True;
end; {func GameOver}

function State1 (var x, y: Integer): Boolean;
var k, i, n, m: Integer;
B, St: Boolean;
tmp: Integer;
begin
repeat
repeat
x := Random (10) + 1;
y := Random (10) + 1;
until Freedom (x, y, Play);
Pkx := Random (2);
Pky := Pkx - 1;
for m := 1 to 2 do
begin
i := 0;
k := 0;
for n := 1 to 2 do
begin
while Freedom (x + Pkx * i, y + Pky * i, Play) do
begin
Inc (k);
Inc (i);
end; {while}
Pkx := -Pkx;
Pky := -Pky;
i := 1;
end; {for}
B := k >= MaxShip;
if B then Break;
tmp := Pkx;
Pkx := Pky;
Pky := tmp;
end; {for}
until B;
St := Killed (x, y);
State1 := St;
if St then
begin
Px := x;
Py := y;
Len := 1;
if MaxShip > 1
then State := 2
else Dec (Kor[Len]);
end; {if}
end; {func State1}

function State2 (var x, y: Integer): Boolean;
var Old: ShortInt;
tmp: Integer;
k: Integer;
St: Boolean;
begin
Old := Play[Px,Py];
Play[Px,Py] := -1;
repeat
if not Freedom (Px + Pkx, Py + Pky, Play) and not Freedom (Px - Pkx, Py - Pky, Play) then
begin
tmp := Pkx;
Pkx := Pky;
Pky := tmp;
end; {if}
if Random (2) = 0 then
begin
x := Px + Pkx;
y := Py + Pky;
end else
begin
x := Px - Pkx;
y := Py - Pky;
end; {if}
until Freedom (x, y, Play);
St := Killed (x, y);
State2 := St;
if St then
begin
Len := 2;
State := 1;
if MaxShip > 2
then State := 3
else Dec (Kor[Len]);
end else
begin
k := 4;
if not Freedom (Px + 1, Py, Play) then Dec (k);
if not Freedom (Px - 1, Py, Play) then Dec (k);
if not Freedom (Px, Py + 1, Play) then Dec (k);
if not Freedom (Px, Py - 1, Play) then Dec (k);
if k < 2 then State := 1;
end; {if}
Play[Px,Py] := Old;
end; {func State2}

function State3 (var x, y: Integer): Boolean;
var Old: ShortInt;
i: Integer;
B, St: Boolean;
begin
for i := 1 to 2 do
begin
x := Px;
y := Py;
while Play[x,y] = 1 do
begin
Inc (x, Pkx);
Inc (y, Pky);
end; {while}
Old := Play[x-Pkx,y-Pky];
Play[x-Pkx,y-Pky] := -1;
B := Freedom (x, y, Play);
Play[x-Pkx,y-Pky] := Old;
if B then Break;
Pkx := -Pkx;
Pky := -Pky;
end; {for}
if B then
begin
St := Killed (x, y);
State3 := St;
if St then
begin
Inc (Len);
if Len = MaxShip then
begin
Dec (Kor[Len]);
State := 1;
end; {if}
end;
end else
begin
Dec (Kor[Len]);
State := 1;
State3 := State1 (x, y);
end; {if}
end; {func State3}

function Comput: Boolean;
var x, y: Integer;
Kill: Boolean;
begin
repeat
case State of
1: Kill := State1 (x, y);
2: Kill := State2 (x, y);
3: Kill := State3 (x, y);
end; {case}
if Kill then Play[x,y] := 1
else Play[x,y] := -2;
until not Kill or GameOver;
Comput := GameOver;
end; {func Comput}

function Life (var Res: Boolean): Boolean;
var K1, K2: Char;
x, y: Integer;
B: Boolean;
begin
repeat
Write ('Your course: ');
repeat
K1 := ReadKey;
if K1 = #27 then Halt (0);
until K1 in ['a'..'j','A'..'J'];
Write (K1);
if K1 < 'a' then y := Ord (K1) - 64
else y := Ord (k1) - 96;
repeat
K2 := ReadKey;
if K2 = #27 then Halt (0);
until K2 in ['0'..'9'];
x := Ord (K2) - 48;
if x = 0 then x := 10;
WriteLn (x);
B := True;
if (Pole[x,y] = -2) or (Pole[x,y] = 1) then
begin
WriteLn ('Erroneous course...');
B := False;
end; {if}
until B;
if Pole[x,y] = 0 then
begin
WriteLn ('Shot down!');
Pole[x,y] := 1;
Res := True;
end else
begin
WriteLn ('Miss.');
Pole[x,y] := -2;
Res := False;
end; {if}
Life := False;
for x := 1 to 10 do
for y := 1 to 10 do
if Pole[x,y] = 0 then Life := True;
end; {func Life}

procedure Print;
var x, y: Integer;
begin
WriteLn (' 1234567890');
WriteLn (' ЪДДДДДДДДДДї');
for y := 1 to 10 do
begin
Write (Char (y + 64), 'і');
for x := 1 to 10 do
begin
case Pole[x,y] of
-2: Write ('.');
0: Write ('ю');
1: write ('*');
else Write (' ');
end; {case}
end; {for}
WriteLn ('і');
end; {for}
WriteLn (' АДДДДДДДДДДЩ');
end; {proc Print}

{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}

var K: Char;
GM, R: Boolean;

begin
ClrScr;
repeat
WriteLn;
WriteLn (' * * * Sea Battle - console version. By Akatov Aleksej, 2004 year. * * *');
Write ('Playing (y/n)? ');
K := ReadKey;
if K = #27 then Halt (0);
WriteLn (K);
if (K = 'Y') or (K = 'y') then
begin
Start;
WriteLn ('I am ready!');
repeat
repeat
GM := Life (R);
until not GM or not R;
if GM then
begin
GM := not Comput;
if not GM then
begin
WriteLn ('You have lost.');
WriteLn;
Print;
end; {if}
end else
begin
WriteLn ('You winner!');
end; {if}
until not GM;
end; {if}
until (K = 'N') or (K = 'n');
end.

[/more]
Автор: akaGM
Дата сообщения: 19.01.2008 14:47
An4eus
нда... надо было заставить тебя библиотеки перекомпилировать...
в назидание так сказать...

Цитата:
установочные дискеты BC++

а...
я думал это твой код на 20 мег...

jck
в задачи
или в гугль...
Автор: wwwregus
Дата сообщения: 22.01.2008 16:09
подскажите как правильно инкрементировать адрес:
есть адрес BA =(void*)0x00495498;
как увеличить его на 2
Автор: akaGM
Дата сообщения: 22.01.2008 16:43
wwwregus
вроде так можно:

void * BA;

(char*)BA += 2*sizeof(char*);
Автор: wwwregus
Дата сообщения: 22.01.2008 17:01
((int*)BA)++;((int*)BA)++; вот так заработало
Автор: akaGM
Дата сообщения: 22.01.2008 17:05
однофигственно...
Автор: akaGM
Дата сообщения: 25.01.2008 20:27
братцы, подскажите есть ли в std библиотеке trim() или что-то подобное?


-------------------
а чёрт с ним, нашёл на Сях из Гентоо дистра, даже ещё лучше...

Код:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

void trim(char *s)
{
size_t len = strlen(s);
size_t lws;

/* trim trailing whitespace */
while (len && isspace(s[len-1])) --len;

/* trim leading whitespace */
if (len) {
lws = strspn(s, " \n\r\t\v");
memmove(s, s + lws, len -= lws);
}
s[len] = 0;
}
Автор: veronica b
Дата сообщения: 26.01.2008 12:06
wwwregus

Цитата:
есть адрес BA =(void*)0x00495498;
как увеличить его на 2

Раз это void, то надо просто прибавить 2 и все.
Если

Код:
type* p_type_add;

p_type_add += 2*sizeof(type);
Автор: akaGM
Дата сообщения: 26.01.2008 14:00
не удаляется...
Автор: BrdGuest
Дата сообщения: 27.01.2008 21:12
wwwregus
veronica b

В C/C++ результатом суммы/разности указателя p на тип type с целым числом N является указатель на тип type, значение которого отличается от значения p на величину N*sizeof(type).
Таким образом, к указателю на void нельзя прибавить целое число, так как sizeof(void) не может быть вычислен. Ну, а после выполнения этого выражения:

Цитата:
p_type_add += 2*sizeof(type);

значение p_type_add будет увеличено на 2*sizeof(type)*sizeof(type).
Увеличить значение указателя type* p на целое число N можно, например, таким способом:

Код: p = (type*)((unsigned)p + N);
Автор: veronica b
Дата сообщения: 28.01.2008 09:41
BrdGuest

Цитата:
Таким образом, к указателю на void нельзя прибавить целое число, так как sizeof(void) не может быть вычислен. Ну, а после выполнения этого выражения

Вы ошибаетесь! Указатель на void есть физический адрес, который и выдается шиной адреса на микросхему памяти. Если мы прибавим 2, то и мы будем обращаться к через следующей ячейке памяти. Компьютер общего назначения имеет байтовую организацию памяти. Тип указателя показывает сколько байтов надо сгрузить из памяти, чтобы получить это данное полностью. Например short -2, long - 4, float -4, double - 8 байт и т.д.
Автор: Bender_R
Дата сообщения: 28.01.2008 14:03
[DELETED]
Автор: Qraizer
Дата сообщения: 28.01.2008 14:36
veronica b, и что? Какое это имеет отношение к правилам адресной арифметики? К тому же void* отнюдь не обязан быть итоговым физическим адресом.
BrdGuest, использовать кастование указателей к unsigned - плохая практика. Для этого есть size_t.
Автор: vecialfor
Дата сообщения: 28.01.2008 15:57
Народ, такой вопрос. Программа - лазает по заданным пользователем директориям и открывает содержимое файлов указанных в диектория. Так вот в начале пользователь указывает путь. Если путь указан с использованием английский символов, то тогда все номрально работает. Например C:\test\ - показывает содержимое папки test. Если же пишу C:\тест\, (при этом аткая папка существует), то пишет что "Invalid File Handle. GetLastError reports 3. Подскажите можно ли как то сделать так, чтобы при вводе рускоязычных символов в пути, прога номрально работала?
Автор: Rudia
Дата сообщения: 28.01.2008 17:05
vecialfor
Какой у вас компилятор?
Если древний досовый, то он не воспринимает длинные имена для него
с:\тест\ будет примерно равно с:\c58e~1\

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.