|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] реализовать вычисление массива: |S(Ai + Bi)| * X + X^2 , i = 0...3 |
|
|
C/C++ - [решено] реализовать вычисление массива: |S(Ai + Bi)| * X + X^2 , i = 0...3
|
Ветеран Сообщения: 876 |
Всем привет, есть задание реализовать вычисление массива: |S(Ai + Bi)| * X + X^2 , i = 0...3
У меня есть решение, объясните пожалуйста часть кода. |
|
------- Отправлено: 19:49, 09-05-2011 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Gooch, у тебя код и реализует формулу. Прям линейно по действиям. Сначала находит сумму, затем ее умножает на x, затем x квадрат заменяется через обычное умножение и плюсуется к текущей сумме.
|
------- Отправлено: 23:10, 09-05-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать до меня не доходит заполнение массива
![]() int pos,i; \\ ввели целочисленные переменные pos=0; \\ сказали что pos будет 0 int sum=0; \\ почему так? я так понимаю выше мы тоже самое могли сделать? типа int i; int pos=0; или всё таки есть разница? ну вот че то понять не могу заполнение массива: for(i=0;i<3;i++) \\ заполняем массив 3 числами, что означает i++? ну и дальше вообще не доходит ![]() { pos=i; { sum= sum+(a[pos]+ b[i]); pos++; } } |
------- Отправлено: 15:55, 10-05-2011 | #3 |
Misanthrope Сообщения: 474
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 16:17, 10-05-2011 | #4 |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать Цитата Hector:
а что насчет дальше? зачем pos прировняли к i? (a[pos]+ b[i]) что означает данное вырожение? |
||
------- Отправлено: 16:23, 10-05-2011 | #5 |
Misanthrope Сообщения: 474
|
Профиль | Отправить PM | Цитировать в данном случае, оно будет прибавлять пока i будет строго меньше 3
Цитата Gooch:
потому что в теле цикла pos=i, а зачем его увеличивать в конце, если потом все равно pos получает значение i непонятною здесь реализуется вычисление S(Ai + Bi) |
|
------- Отправлено: 16:28, 10-05-2011 | #6 |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать Цитата Hector:
Цитата Hector:
int my_assembler(int x) { int sum=0; __asm { MOV esi,0 MOV ecx,0 //вычисление суммы массивов cycle_i: MOV eax,a[esi] MOV edx,b[esi] ADD esi,4 //сумма массивов ADD sum, eax ADD sum, edx INC ecx //увеличивает CMP ecx, 3 //сравнивает JB cycle_i //для беззнаковых чисел //модуль abso: neg sum JS abso //переход, если установлен бит знака //умножаем sum на x MOV eax,sum MOV ecx,x IMUL ecx MOV sum,eax //вычисляем квадрат x MOV eax,x MOV ecx,x IMUL ecx //складываем с суммой квадрат x ADD sum,eax } return sum; } void main() { int i; system("title Вычисление значения выражения"); for(int i=0; i<3; i++) { printf("Vvedite element A: "); scanf("%d",&a[i]); } for(int i=0; i<3; i++) { printf("Vvedite element B: "); scanf("%d",&b[i]); } int x=0; printf("Vvedite chislo X: "); scanf("%d",&x); //printf("C++=%i\n",my_c(x)); printf("Otvet=%i\n",my_assembler(x)); system("pause"); } ![]() |
||
------- Отправлено: 17:02, 10-05-2011 | #7 |
Старожил Сообщения: 154
|
Профиль | Отправить PM | Цитировать Цитата Gooch:
начнем с того что если ты не знаешь ассемблера смысла объяснять каждую строчку особого нет, описание команд ты можешь посмотреть и в инете, тут никакого секрета нет, коментари в коде подробные. а вот все что не попало в цитату - это уже чистый си. почему это возможно? все очень просто. любой компьютер ни коем образом не знает что такое си, бэйсики, и даже ассемблер. он знает только машинный код (готовый exe если понятнее). для того чтобы из языка программирования сделать машинный код (компилировать программу) придумали специальные программы - компиляторы. Они то как раз и знают как из строчек кода на языке сделать машинный код. Естественно компилятор понимает только свой конкретный язык программирования, но ассемблер (любой) настолько приближен к машинному коду что все компиляторы тем или иным образом его знают и могут компилировать вместе со своим родным языком. |
|
Отправлено: 19:12, 10-05-2011 | #8 |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать вообщем си меня не интересует, что такое компилятор и что такое вставка асемблереная я вкурсе. моя задача решить задание по предмету ассемблер при помощи языка высшего уровня. данная задача это пример решения моего личного задания. хочу понять её решение для того чтоб написать решение своей. в коде сверху, как я уже разобрался, первое решение на языке С, второе на Ассемблере. На данный момент читаю как организовывать массивы в асм.
|
------- Отправлено: 19:24, 10-05-2011 | #9 |
Старожил Сообщения: 154
|
Профиль | Отправить PM | Цитировать в данной примере массив не организован на ассемблере, я правда в теле мейна не вижу объявления этих массивов но оно там быть должно.
работа с массивом такова что а и b это начальные адреса (ты это знаешь), и они смещаются на регистр esi как и в си - a[esi] и в цикле этот регистр увеличивается на 4 потому что int обычно занимает 4 байта (но ты же это знаешь). цикл организован ссылкой которая в ассемблере пишется так - some_name: . Цикл первый до тех пор пока ecx не станет больше (JB) 3 , в теле цикла каждый раз идет INC ecx. Вот и вся работа с массивами, которой собственно и нет. а вообще в ассемблере массив выделяется так (как пример) - mas db 10 dup (?), где mas - имя массива, db - размер элемента массива, 10 - количество элементов, 0 - чем заполнить. |
Отправлено: 20:02, 10-05-2011 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] кто поможет реализовать такое? | Cherterok | Вебмастеру | 3 | 02-03-2011 10:36 | |
[решено] Как реализовать в скрипте возможность автозаполнения | evg64 | AutoIt | 5 | 03-10-2009 20:07 | |
[решено] Как реализовать. VistaMizer интегрированная в дистрибутив | K.A.V. | Автоматическая установка Windows 2000/XP/2003 | 5 | 30-09-2009 00:15 | |
[решено] P5K/EPU + RAID как реализовать? | svchost | Материнские платы и память | 4 | 20-10-2008 16:35 | |
вычисление даты | lastdruid | Общий по Linux | 1 | 03-03-2007 16:14 |
|