
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
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);