ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

10.11.2008, 20:07
|
|
Новичок
Регистрация: 08.11.2008
Сообщений: 9
Провел на форуме: 28743
Репутация:
-5
|
|
Надо перевести кусок кода из C++ в C! спс заранее!
long step(int i)
{
int g = 1;
for(int j = 1; j<i; j++)g*=10;
return g;
}
int main(int argc, char* argv[])
{
int k;
cin >> k;
int l = k, g=1;
while(l / 10 > 0)
{
l/=10;
++g;
}
int s1, s2;
s1 = k/step(g) + (k/step(g-1) % 10);
s2 = k %10 + (k/step(2))%10;
|
|
|

11.11.2008, 10:27
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Код:
#include <stdio.h>
long step (int i) {
int g = 1, j;
for (j = 1; j < i; g *= 10, j++);
return g;
}
int main (int argc, char* argv[]) {
int k;
printf ("Enter your number: ");
scanf ("%d", &k);
int l = k, g = 1;
while (l / 10 > 0) {
l /= 10;
++g;
}
int s1, s2;
s1 = k / step (g) + (k / step (g - 1) % 10);
s2 = k % 10 + (k / step (2)) % 10;
return 0;
}

|
|
|

11.11.2008, 10:43
|
|
Познающий
Регистрация: 08.07.2005
Сообщений: 47
Провел на форуме: 149096
Репутация:
65
|
|
Может я, конечно, жестоко ошибаюсь, но мне кажется, что по стандарту С - все переменные должны быть обьявлены в самом начале функции - до любого прочего кода.
|
|
|

11.11.2008, 12:35
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
все переменные должны быть обьявлены в самом начале функции
можно еще в циклах обяъвлять 
|
|
|

11.11.2008, 12:53
|
|
Познающий
Регистрация: 21.09.2008
Сообщений: 42
Провел на форуме: 127017
Репутация:
61
|
|
Сообщение от criz
можно еще в циклах обяъвлять 
Borland C это далеко не стандарт Си.. ИМХО
Парень выше правильно сказал. По стандарту в начале кода должны быть сначала объявлены переменные, иначе на половине сишных компиляторов работать не будет.
Ещё кстати на Си в старых компилерах типы параметров, передаваемых в функцию указываются после названия функции, но перед началом блока функции:
Код:
void some_func(a, b)
int a,
int b
{ //кодт
}
http://en.wikipedia.org/wiki/C_syntax
|
|
|

11.11.2008, 13:19
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Borland C это далеко не стандарт Си.. ИМХО
согласен, что не стандарт. Сам не люблю когда встречаю объявление в середине кода =\
не удобно блин))
|
|
|

11.11.2008, 16:00
|
|
Новичок
Регистрация: 08.11.2008
Сообщений: 9
Провел на форуме: 28743
Репутация:
-5
|
|
ага, спасибо, ребят!)
|
|
|

12.11.2008, 13:11
|
|
Новичок
Регистрация: 05.03.2008
Сообщений: 11
Провел на форуме: 46977
Репутация:
1
|
|
Люди помогите плиз!
Я хочу стать веб программистом, а мне тут в универе дают лабы на асме =((( я в нем ваще ОЛЕНЬ
вот надо посчитать такой вот пример: (8-10)*(5/2+4)/(9-3*2)
я вот тут чето пытался но не получается =(
;(8-10)*(5/2+4)/(9-3*2)
.8086
.model small
.stack 200h
.data
a db 8
b db 10
c db 5
d db 2
e db 4
f db 9
g db 3
result dw ?
zal dw ?
.code
.startup
mov al,a ;al=8
sub al,b ;ax=8-10
mov bx,ax ;bx=ax
mov ax,0 ;ax=0
mov al,c ;al=5
div d ;ax=5/2
mov cx,ax ;cx=ax
mov ax,0
mov al,e
add cx,ax ;cx=cx+ax=5/2+4
mov ax,0
mov ax,bx
div cx
.exit 0
end @startup
|
|
|

12.11.2008, 13:30
|
|
Участник форума
Регистрация: 06.11.2008
Сообщений: 208
Провел на форуме: 261838
Репутация:
9
|
|
Я конечно не гений в ассемблере, но сразу на глаз вижу вроде не правильно. У нас в универе подобные задания есть, вечером постараюсь отписаться(если раньше никто не поможет), или если что пиши в личку - помогу.
|
|
|

12.11.2008, 13:37
|
|
Познающий
Регистрация: 21.09.2008
Сообщений: 42
Провел на форуме: 127017
Репутация:
61
|
|
Сообщение от advokat.holy
!
Нет возможности проверить, но думаю должно работать (все деление целочисленное):
Код:
; 8 - 10
mov al, 8
sub al, 10
push al
; 5/2 + 4
mov ax, word ptr 5
mov bl, 2
div bl
add al, 4
xor ah, ah ; деление без остатка
; умножение скобок
mov bl, al
pop al
mul bl ; нам достаточно байта, чтобы не лезло в ax:dx
push ax
mov al, 3
mov bl, 2
mul bl
mov bx, word ptr 9
sub bx, ax
pop ax
div bx
; результат в al, остаток в ah
xor ah, ah ; договорились, что остаток не нужен
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|