Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- short* c_comp(short* numbers);// вычисление на С
- short* asm_comp(short* numbers);// вычисление на Ассемблере
- void output(short* numbers, char* lng);//вывод чисел
- short* input();//ввод чисел
- int check_size(char* in);//проверка количетсва элементов
- int are_digits(char* in);//проверка на то, что элементы - цифры
- int are_spaces(char* in);
- int main(){
- short* numbers;
- char command;
- while (1){
- if ((numbers = input()) != NULL){
- output(c_comp(numbers), "C");
- output(asm_comp(numbers), "Asm");
- }
- else printf("Error\n");
- while (1){
- printf("Try again? (y\\n)\n");
- scanf("%c", &command);
- if (command == 'y' || command == 'n'){
- getchar();
- break;
- }
- else{
- printf("Error\n");
- while(getchar() != '\n');
- continue;
- }
- }
- if (command == 'y') continue;
- else break;
- }
- free(numbers);
- numbers = NULL;
- getchar();
- return 0;
- }
- short* c_comp(short* numbers){
- short* new_numbers = NULL;
- new_numbers = (short*)malloc(3 * sizeof(short));
- new_numbers[0] = numbers[0];
- if ((numbers[0] == numbers[2]) && (numbers[1] != numbers[0] && (numbers[1] + 3 < 7))){
- new_numbers[1] = numbers[1] + 3;
- new_numbers[2] = numbers[2];
- }
- else if ((numbers[0] == numbers[2]) && (numbers[1] != numbers[0] && (numbers[1] + 3 >= 7))) {
- new_numbers[1] = numbers[1];
- new_numbers[2] = numbers[2];
- }
- else if ((numbers[0] != numbers[2]) && (numbers[1] != numbers[0] && (numbers[1] + 3 < 7))){
- new_numbers[1] = numbers[2];
- new_numbers[2] = numbers[1];
- }
- else {
- new_numbers[1] = numbers[1];
- new_numbers[2] = numbers[2];
- }
- return new_numbers;
- }
- short* asm_comp(short* numbers){
- short first = numbers[0], second = numbers[1], third = numbers[2];
- short* new_numbers = NULL;
- new_numbers = (short*)malloc(3 * sizeof(short));
- new_numbers[0] = numbers[0];
- _asm
- {
- MOV AX, first;// первая цифра а AX
- MOV BX, third;// вторая цифра в BX
- CMP AX, BX;
- JE first_is_equal_to_third;// если первая цифра равна третьей
- JNE something_is_wrong;// если первая цифра не равна третьей
- first_is_equal_to_third:// первая цифра равна третьей
- MOV BX, second;// вторая цифра в BX
- CMP AX, BX;
- JE something_is_wrong;// если первая цифра равна второй
- JNE first_is_not_equal_to_second;// если первая цифра не равна второй
- first_is_not_equal_to_second://первая цифра не равна второй
- CMP BX, 7;
- JB second_plus_3_is_lower_than_10;// если нет переполнения
- JAE end;// если есть переполнение
- second_plus_3_is_lower_than_10:// нет переполнения
- ADD BX, 3;
- MOV second, BX;
- JMP end;
- something_is_wrong:// что-то не так, но вторая цифра не была увеличена
- MOV AX, third;// третья цифра в AX
- MOV BX, second;// вторая цифра в BX
- MOV third, BX;// меняем местами вторую и третью цифры
- MOV second, AX;
- JMP end;
- end:
- }
- new_numbers[1] = second;
- new_numbers[2] = third;
- return new_numbers;
- }
- void output(short* numbers, char* lng){
- int i;
- short* new_numbers = NULL;
- new_numbers = numbers;
- printf("%s rezult:", lng);
- for (i = 0; i < 3; i++) printf("%2d", new_numbers[i]);
- printf("\n");
- free(new_numbers);
- }
- short* input(){
- char in[50];
- short i, j;
- short* numbers = NULL;
- int length, space_cnt = 0, length_of_string, char_cnt = 0;
- printf("Insert 3 numbers:\n");
- gets(&in);
- length_of_string = strlen(&in);
- length = length_of_string - 2;
- numbers = malloc((short*)(3 * sizeof(short)));
- if (!check_size(length) && !are_digits(in) && !are_spaces(in)){
- for (i = 0, j = 0; i < length, j < length + 2; i++, j += 2)
- numbers[i] = in[j] - '0';
- return numbers;
- }
- else return NULL;
- }
- int check_size(int length){
- if (length == 3) return 0;
- else return 1;
- }
- int are_digits(char* in){
- int i, cnt = 0;
- int length = strlen(&in);
- for (i = 0; i < length + 2; i += 2){
- if (in[i] < '0' || in[i] > '9') cnt++;
- }
- if (cnt == 0) return 0;
- else return 1;
- }
- int are_spaces(char* in){
- int i, cnt = 0;
- int length = strlen(&in);
- for (i = 1; i < length + 1; i += 2){
- if (in[i] != ' ') cnt++;
- }
- if (cnt == 0) return 0;
- else return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement