Сообщение от Катя Трубникова:
нужна таблица , можно использовать словарь кит-рус abby lingua электронный, разместить по колонкам: иероглиф, транскрипция, перевод и значения. Кто может с этим помочь? и сколько это будет стоить? и какие сроки?
Сообщение от black13666:
Ребят,нужна помощь в программе Visual Basic,работасразу скажу не сложная,нужно просто выполнить порядка 20 заданий по книжке для первого курса института.Естественно оплачиваемо,всем тем кто может оказать помощь,прошу писать в лс или 8 951 877 07 07.СРОЧНО ИЩЕТСЯ ПРОГРАММИСТ!!!
Сообщение от manifest:
Вооружился дизассемблером и профайлером
osx 10.6 x64
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)
struct A {
A() :val_(0) {
}
int byValue() const {
return val_;
}
const int &byReference() const {
return val_;
}
const int *const byPointer() const {
return &val_;
}
void setByValue(int val) {
val_ = val;
}
void setByReference(const int &val) {
val_ = val;
}
void setByPointer(const int *const val) {
val_ = *val;
}
int val_;
};
int main() {
int x = 1;
A a;
int val = a.byValue();
const int &ref = a.byReference();
const int *const ptr = a.byPointer();
a.setByValue(x);
a.setByReference(x);
a.setByPointer(&x);
}
/// main
0x0000000100000a28 <+0000> push %rbp
0x0000000100000a29 <+0001> mov %rsp,%rbp
0x0000000100000a2c <+0004> sub $0x30,%rsp
0x0000000100000a30 <+0008> movl $0x1fffffff,-0x4(%rbp)
0x0000000100000a37 <+0015> movl $0x1,-0x8(%rbp)
0x0000000100000a3e <+0022> lea -0x10(%rbp),%rdi
0x0000000100000a42 <+0026> callq 0x100000bc2 <_ZNK1A7byValueEv>
0x0000000100000a47 <+0031> mov %eax,-0x14(%rbp)
0x0000000100000a4a <+0034> lea -0x10(%rbp),%rdi
0x0000000100000a4e <+0038> callq 0x100000bd2 <_ZNK1A11byReferenceEv>
0x0000000100000a53 <+0043> mov %rax,-0x20(%rbp)
0x0000000100000a57 <+0047> lea -0x10(%rbp),%rdi
0x0000000100000a5b <+0051> callq 0x100000be0 <_ZNK1A9byPointerEv>
0x0000000100000a60 <+0056> mov %rax,-0x28(%rbp)
0x0000000100000a64 <+0060> mov -0x8(%rbp),%esi
0x0000000100000a67 <+0063> lea -0x10(%rbp),%rdi
0x0000000100000a6b <+0067> callq 0x100000bee <_ZN1A10setByValueEi>
0x0000000100000a70 <+0072> lea -0x8(%rbp),%rsi
0x0000000100000a74 <+0076> lea -0x10(%rbp),%rdi
0x0000000100000a78 <+0080> callq 0x100000c04 <_ZN1A14setByReferenceERKi>
0x0000000100000a7d <+0085> lea -0x8(%rbp),%rsi
0x0000000100000a81 <+0089> lea -0x10(%rbp),%rdi
0x0000000100000a85 <+0093> callq 0x100000c1e <_ZN1A12setByPointerEPi>
0x0000000100000a8a <+0098> mov $0x0,%eax
0x0000000100000a8f <+0103> leaveq
0x0000000100000a90 <+0104> retq
//byValue
0x0000000100000bc2 <+0000> push %rbp
0x0000000100000bc3 <+0001> mov %rsp,%rbp
0x0000000100000bc6 <+0004> mov %rdi,-0x8(%rbp)
0x0000000100000bca <+0008> mov -0x8(%rbp),%rax
0x0000000100000bce <+0012> mov (%rax),%eax
0x0000000100000bd0 <+0014> leaveq
0x0000000100000bd1 <+0015> retq
//byReference
0x0000000100000bd2 <+0000> push %rbp
0x0000000100000bd3 <+0001> mov %rsp,%rbp
0x0000000100000bd6 <+0004> mov %rdi,-0x8(%rbp)
0x0000000100000bda <+0008> mov -0x8(%rbp),%rax
0x0000000100000bde <+0012> leaveq
0x0000000100000bdf <+0013> retq
//byPointer
0x0000000100000be0 <+0000> push %rbp
0x0000000100000be1 <+0001> mov %rsp,%rbp
0x0000000100000be4 <+0004> mov %rdi,-0x8(%rbp)
0x0000000100000be8 <+0008> mov -0x8(%rbp),%rax
0x0000000100000bec <+0012> leaveq
0x0000000100000bed <+0013> retq
//setByValue
0x0000000100000bee <+0000> push %rbp
0x0000000100000bef <+0001> mov %rsp,%rbp
0x0000000100000bf2 <+0004> mov %rdi,-0x8(%rbp)
0x0000000100000bf6 <+0008> mov %esi,-0xc(%rbp)
0x0000000100000bf9 <+0011> mov -0x8(%rbp),%rdx
0x0000000100000bfd <+0015> mov -0xc(%rbp),%eax
0x0000000100000c00 <+0018> mov %eax,(%rdx)
0x0000000100000c02 <+0020> leaveq
0x0000000100000c03 <+0021> retq
//setByReference
0x0000000100000c04 <+0000> push %rbp
0x0000000100000c05 <+0001> mov %rsp,%rbp
0x0000000100000c08 <+0004> mov %rdi,-0x8(%rbp)
0x0000000100000c0c <+0008> mov %rsi,-0x10(%rbp)
0x0000000100000c10 <+0012> mov -0x10(%rbp),%rax
0x0000000100000c14 <+0016> mov (%rax),%edx
0x0000000100000c16 <+0018> mov -0x8(%rbp),%rax
0x0000000100000c1a <+0022> mov %edx,(%rax)
0x0000000100000c1c <+0024> leaveq
0x0000000100000c1d <+0025> retq
//setByPointer
0x0000000100000c1e <+0000> push %rbp
0x0000000100000c1f <+0001> mov %rsp,%rbp
0x0000000100000c22 <+0004> mov %rdi,-0x8(%rbp)
0x0000000100000c26 <+0008> mov %rsi,-0x10(%rbp)
0x0000000100000c2a <+0012> mov -0x10(%rbp),%rax
0x0000000100000c2e <+0016> mov (%rax),%edx
0x0000000100000c30 <+0018> mov -0x8(%rbp),%rax
0x0000000100000c34 <+0022> mov %edx,(%rax)
0x0000000100000c36 <+0024> leaveq
0x0000000100000c37 <+0025> retq
Если разрешить компилятору оптимизировать, будет сформирован аналогичный код, как для случая передачи по значению, так и для передачи по ссылке:
//// by reference
int main() {
A a;
a.setByReference(3);
const int &ref = a.byReference();
std::cout<<ref<<std::endl;
}
//// by value
int main() {
A a;
a.setByValue(3);
int val = a.byValue();
std::cout<<val<<std::endl;
}
0x0000000100000d91 <+0000> push %rbp
0x0000000100000d92 <+0001> mov %rsp,%rbp
0x0000000100000d95 <+0004> mov $0x3,%esi
0x0000000100000d9a <+0009> mov 0x297(%rip),%rdi # 0x100001038
0x0000000100000da1 <+0016> callq 0x100000dfa <dyld_stub__ZNSolsEi>
0x0000000100000da6 <+0021> mov %rax,%rdi
0x0000000100000da9 <+0000> callq 0x100000e0c <dyld_stub__ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_>
0x0000000100000dae <+0029> xor %eax,%eax
0x0000000100000db0 <+0031> leaveq
0x0000000100000db1 <+0032> retq
1) для указателей и ссылок компилятор сформировал аналогичный код
2) при возврате переменной из ф-ции, по значению сформирована дополнительная иструкция, по ссылке (указателю) - нет
3) при передаче переменной в ф-цию, по ссылке (указателю) сформирована дополнительная иструкция, по значению - нет
4) по результатам профилирования, время выполнения ф-ции setByValue() во всех проведенных тестах меньше времени выполнения setByReference() и setByPointer()
5) по результатам профилирования, время выполнения ф-ций byValue(), byReference() и byPointer() от теста к тесту изменялось, по всем тестам среднее значение одинаково для каждой из ф-ций
Вывод: эффективность кода с передачей переменной встроеного типа по значению и по ссылке одинакова (для оптимизированного компилятором кода, который и будет используется в реальных приложениях), поэтому для повышения читаемости правильнее использовать передачу по значению. К тому же, даже в случае не оптимизированнного кода выигрыш в одну инстукцию для "get" ф-ции byReference() по результатам профилирования не сокращает её время выполнения, в то время как "set" ф-ция setByReference() проигрывает по времени setByValue().
Сообщение от Спартак21:
Какая тут проблема???
Сообщение от Spectator:
Проблема тут в том что ты не понимаешь что такое call)))
Сообщение от Спартак21:
Братух!
Сообщение от Спартак21:
батенька, с чего бы вдруг и по кочкам прыгаю? Я недопетрил
Сообщение от Goldcoding:
Оказываю помощь в программировании, примеры можно посмотреть тут.
program Project3; {$APPTYPE CONSOLE} uses SysUtils; const n=2; Type chislo=packed array [1..n] of 0..9; stack=^Node; Node=Record info:chislo; next:stack End; var top,L:stack; ch:chislo; Procedure InStack(L:stack; x:chislo); var q:stack; begin {InStack} new(q); q^.info:=x; q^.next:=top; top:=q end; {InStack} Procedure PopStack(var L:stack; var ch:chislo); var q:stack; begin {PopStack} ch:=top^.info; q:=top; top:=top^.next; dispose(q) end; {PopStack} Procedure InitStack(var L:stack); begin top:=nil end; procedure Print(stek1:stack); var i:integer; begin while stek1<>nil do {пока указатель stek1 не станет указывать в пустоту} begin {а это произойдёт как только он перейдёт по ссылке последнего элемента} for i:=1 to n do Write(stek1^.info[i]); {выводить данне} write(' '); stek1:=stek1^.next {и переносить указатель вглубь по стеку} end; end; Function EmptyStack(L:stack):boolean; begin EmptyStack:=top=nil; end; Procedure upor(var L:stack); var i,j,k:integer; ch:chislo; a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,L1:stack; begin {upor} InitStack(L); writeln('skolko chisel?'); readln(k); writeln('vvedite po cifre vse chisla'); for i := 1 to k do begin for j:=1 to n do begin read(ch[j]); InStack(L,ch) end; end; Print(L); InitStack(a0); InitStack(a1); InitStack(a2); InitStack(a3); InitStack(a4); InitStack(a5); InitStack(a6); InitStack(a7); InitStack(a8); InitStack(a9); InitStack(L1); while not EmptyStack(L) do begin PopStack(L,ch); for i := n downto 1 do case ch[i] of 0:begin InStack(a0,ch); a0^.next:=a1; end; 1:begin InStack(a1,ch); a1^.next:=a2; end; 2:begin InStack(a2,ch); a2^.next:=a3; end; 3:begin InStack(a3,ch); a3^.next:=a4; end; 4:begin InStack(a4,ch); a4^.next:=a5; end; 5:begin InStack(a5,ch); a5^.next:=a6; end; 6:begin InStack(a6,ch); a6^.next:=a7; end; 7:begin InStack(a7,ch); a7^.next:=a8; end; 8:begin InStack(a8,ch); a8^.next:=a9; end; 9:InStack(a9,ch); end; L^.next:=a0; end; Print(L) end; {upor} begin Upor(L); readln end.
Сообщение от симпай:
Нужно написать задачку, тема написана что стеки. Я вроде написал, но программа не хочет работать. Взгляние одним глазком, подскажите что не так.
Сообщение от :
Function EmptyStack(L:stack):boolean;
begin
EmptyStack:=top=nil;
end;
program Project3; {$APPTYPE CONSOLE} uses SysUtils; const n=2; Type chislo=packed array [1..n] of 0..9; stack=^Node; Node=Record info:chislo; next:stack End; var top,L:stack; ch:chislo; x:integer; Procedure InStack(var L:stack; var x:chislo); var q:stack; begin {InStack} new(q); q^.info:=x; q^.next:=L; L:=q end; {InStack} Procedure PopStack(var L:stack; var ch:chislo); var q:stack; begin {PopStack} ch:=top^.info; q:=L; L:=q^.next; dispose(q) end; {PopStack} Procedure InitStack(var L:stack); begin top:=nil end; procedure Print(var stek1:stack); var i:integer; begin while stek1<>nil do {пока указатель stek1 не станет указывать в пустоту} begin {а это произойдёт как только он перейдёт по ссылке последнего элемента} for i:=1 to n do Write(stek1^.info[i]); {выводить данне} write(' '); stek1:=stek1^.next {и переносить указатель вглубь по стеку} end; end; Function EmptyStack(L:stack):boolean; begin EmptyStack:=top=nil; end; Procedure upor(var L:stack); var i,j,k:integer; ch:chislo; a0,a1,a2,a3,a4,a5,a6,a7,a8,a9:stack; begin {upor} InitStack(L); writeln('skolko chisel?'); readln(k); writeln('vvedite po cifre vse chisla'); for i := 1 to k do begin for j:=1 to n do read(ch[j]); InStack(L,ch); end; InitStack(a0); InitStack(a1); InitStack(a2); InitStack(a3); InitStack(a4); InitStack(a5); InitStack(a6); InitStack(a7); InitStack(a8); InitStack(a9); while not EmptyStack(L) do begin PopStack(L,ch); for i := n downto 1 do case ch[i] of 0:begin InStack(a0,ch); a0^.next:=a1; end; 1:begin InStack(a1,ch); a1^.next:=a2; end; 2:begin InStack(a2,ch); a2^.next:=a3; end; 3:begin InStack(a3,ch); a3^.next:=a4; end; 4:begin InStack(a4,ch); a4^.next:=a5; end; 5:begin InStack(a5,ch); a5^.next:=a6; end; 6:begin InStack(a6,ch); a6^.next:=a7; end; 7:begin InStack(a7,ch); a7^.next:=a8; end; 8:begin InStack(a8,ch); a8^.next:=a9; end; 9:InStack(a9,ch); end; L:=a0; end; Print(L) end; {upor} begin Upor(L); print(L); readln; readln(x) end.
Сообщение от silly:
Прочитал еще раз: InStack, PopStack, InitStack, EmptyStack передается аргумент L :stack, который в них не используется. Также, я советую вам почитать про связные списки и внести соответствующие изменения в объявление типа Node. Весь код придется переписать.
Сообщение от :
stack=^Node;
Node=Record
info:chislo;
next:stack
End;
Сообщение от aerin:
Spectator, а что действительно нужно такое жесткое модерирование в разделе? Тут все и так на ладан дышит, и, если уж на то пошло, как раз вы первый и начали размахивать сабелькой и трясти первичными половыми признаками в этом топике.