Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
библиотеки.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
117.76 Кб
Скачать

1

2.С клавиатуры вводится строка длиной N, 2<N<100.Заменить несколько подряд идущих пробелов одним.Результат вывести на экран.

zadacha2 PROC C simbol:DWORD, len: DWORD

mov esi, simbol

xor ecx, ecx

inc ecx

inc esi

.WHILE ecx < len

xor eax, eax

mov al, [esi]

.IF al == ' '

mov al, [esi - 1]

.IF al == ' '

mov ebx, ecx

.WHILE ebx < len

mov al,[esi + 1]

mov [esi], al

inc ebx

inc esi

.ENDW

mov esi, simbol

add esi, ecx

mov eax, len

dec eax

mov len, eax

jmp stop

.ENDIF

.ENDIF

inc esi

inc ecx

stop:

.ENDW

ret

zadacha2 ENDP

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <locale.h>

extern void zadacha2(char* str,int len);

void main()

{

char str[100];

setlocale(LC_ALL,"Rus");

gets(str);

OemToChar(str,str);

zadacha2(str,strlen(str));

puts(str);

getch();

}

3. Дан целочисленный массив размера N, 2<N<100. Размер массива и его элементы вводятся с клавиатуры. Найти сумму квадратов двух самых маленьких элементов массива. Результат вывести на экран.

.data

ct DD 4

.code

zadacha3 PROC C arr:DWORD, n:DWORD

mov esi, arr

xor ecx,ecx

.WHILE ecx < n

mov ebx, n

dec ebx

mov esi, arr

mov eax, n

dec eax

mul ct

add esi, eax

.WHILE ecx < ebx

mov eax, [esi]

test eax, eax

jns p

mov eax, [esi]

push eax

mov eax, [esi-4]

test eax, eax

jns p1

mov edx, [esi-4]

pop eax

.IF edx > eax

mov edx, [esi-4]

mov eax, [esi]

mov [esi], edx

mov [esi-4], eax

.ENDIF

jmp next

p1:

mov eax, [esi]

mov edx, [esi-4]

.IF edx < eax

mov [esi], edx

mov [esi-4], eax

.ENDIF

jmp next1

p:

mov eax, [esi-4]

test eax, eax

jns p2

mov edx, [esi-4]

mov eax, [esi]

.IF edx < eax

mov [esi], edx

mov [esi-4], eax

.ENDIF

jmp next2

p2:

mov eax, [esi]

mov edx, [esi-4]

.IF edx > eax

mov [esi], edx

mov [esi-4], eax

.ENDIF

next:

next1:

next2:

sub esi, 4

dec ebx

.ENDW

inc ecx

.ENDW

mov esi, arr

mov eax,[esi]

mov ebx,eax

mul ebx

mov ecx,eax

mov eax,[esi+4]

mov ebx,eax

mul ebx

add eax,ecx

ret

zadacha3 ENDP

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <locale.h>

extern int zadacha3(int* arr,int n);

Void main()

{

int arr[100],i=0,n=0;

setlocale(LC_ALL,"Rus");

printf("введите размер массива: ");

scanf("%d",&n);

for(i=0;i<n;i++){

printf("\n%d элемент = ",(i+1));

scanf("%d",&arr[i]);

}

printf("\n\nМассив:\n");

for(i=0;i<n;i++) printf("%d\t",arr[i]);

printf("\n\nСумма квадратов двух меньших элементов = %d",zadacha3(arr,n));

getch();

}

4. С клавиатуры вводится строка длиной N, 2<N<100. Заменить обычные скобки '(' и ')' на фигурные '{' и '}', а фигурные скобки на угловые '<' и '>'. Результат вывести на экран.

zadacha4 PROC C simbol:DWORD, len: DWORD

mov esi, simbol

xor ecx, ecx

.WHILE ecx < len

xor eax, eax

mov al, [esi]

.IF al == '('

mov al,'{'

.ELSEIF al == ')'

mov al,'}'

.ELSEIF al == '{'

mov al,'<'

.ELSEIF al == '}'

mov al,'>'

.ENDIF

mov [esi],al

inc esi

inc ecx

.ENDW

ret

zadacha4 ENDP

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <locale.h>

extern void zadacha4(char* str,int len);

Void main()

{

char str[100];

setlocale(LC_ALL,"Rus");

gets(str);

OemToChar(str,str);

Zadacha4(str,strlen(str));

puts(str);

getch();

}

5. Дан целочисленный массив размера N, 2<N<100. Размер массива и его элементы вводятся с клавиатуры. Найти произведение всех элементов массива, меньших 10. Результат выве-сти на экран.

zadacha5 PROC C arr:DWORD, n:DWORD

mov esi, arr

xor ecx,ecx

.WHILE ecx < n

mov eax, [esi]

test eax, eax

jns p

mul multi

mov multi, eax

p:

.IF eax < 10

mul multi

mov multi, eax

.ENDIF

add esi, 4

inc ecx

.ENDW

mov eax, multi

ret

zadacha5 ENDP

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <locale.h>

extern void zadacha5(int* arr, int n);

Void main()

{

int arr[100],n=0,i=0;

setlocale(LC_ALL,"Rus");

printf("введите размер массива: ");

scanf("%d",&n);

for(i=0;i<n;i++){

printf("\n%d элемент = ",(i+1));

scanf("%d",&arr[i]);

}

printf("\n\nМассив:\n");

for(i=0;i<n;i++) printf("%d\t",arr[i]);

printf("\n\nПроизведение элементов меньше 10 = %d",zadacha5(arr,n));

getch();

}

6. С клавиатуры вводится строка длиной N, 2<N<100. Заменить пробелы на '_', а знаки пре-пинания на пробелы. Результат вывести на экран.

zadacha6 PROC C simbol:DWORD, len: DWORD

mov esi, simbol

xor ecx, ecx

.WHILE ecx < len

xor eax, eax

mov al, [esi]

.IF al == ' '

mov al,'_'

.ELSEIF al == ',' || al == '.' || al == ';' || al == '!' || al == '?' || al == ':'

mov al,' '

.ENDIF

mov [esi],al

inc esi

inc ecx

.ENDW

ret

zadacha6 ENDP

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <locale.h>

extern void zadacha6(char* str,int len);

Void main()

{

char str[100];

setlocale(LC_ALL,"Rus");

gets(str);

OemToChar(str,str);

Zadacha6(str,strlen(str));

puts(str);

getch();

}

7

8. Дан целочисленный массив размера N, 2<N<100. Размер массива и его элементы вводятся с клавиатуры. Обнулить все элементы кроме минимального и максимального. Результат вывести на экран.

zadacha8 PROC C arr:DWORD, n:DWORD

mov esi, arr

xor ecx,ecx

mov eax,[esi]

mov min,eax

mov max, eax

.WHILE ecx < n

mov eax,[esi]

cmp eax,min

jge p

mov min, eax

p:

cmp eax,max

jle p2

mov max, eax

p2:

inc ecx

add esi, 4

.ENDW

mov esi, arr

xor ecx,ecx

.WHILE ecx < n

mov eax,[esi]

.IF eax != min && eax != max

xor eax, eax

mov [esi],eax

.ENDIF

add esi, 4

inc ecx

.ENDW

ret

zadacha8 ENDP

#include <stdio.h>

#include <string.h>

#include <windows.h>

#include <locale.h>

extern int zadacha8(int* arr,int n);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]