Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Дан массив из 40 символов, содержащий слова, разделенные одним пробелом. Определить, сколько раз каждое слово встречается в этом массиве.

B матрице A[1..N,1..M] упорядочить элементы столбца. содержащего наибольшее количество отрицательных чисел, по убыванию. | В массиве C[1..N] все элементы, больше среднего арифметического положительных чисел, заменить на первое положительное значение массива. | Подсчитать количество предложений. Расставить предложения по возрастанию количества слов в каждом | Определить среднее арифметическое четных элементов, лежащих после максимального значения в массиве D[I..N]. Все нечетные рассортировать по возрастанию. | Создать массив М[ 1 ..N]. Определить минимальное значение среди первых N DIV 2 чисел. Максимальное всего массива заменить в массиве на это минимальное значение. | Определить, сколько нулей лежит между минимальным и максимальным значениями массива H[1..N]. До и после экстремумов массив отсортировать по убыванию. | Определить средн. арифм. положительных чисел, лежащих после минимального значения в массиве B[1..N]. Числа до минимального рассортировать по возрастанию. | В матрице D[1..N.1..M] максимальный элемент заменить средним арифметическим элементов строки в которой находится максимальный элемент. |


Читайте также:
  1. A Прочитайте следующие слова, представленные в транскрипции
  2. Ask.com: www.ask.com (введите слово и смотрите «narrow your search», «expand your search» и «related terms» в правой части).
  3. B Прочитайте следующие слова, обращая внимание на правила чтения гласных в ударной позиции, а также на чтение буквосочетаний гласных и согласных
  4. B Прочитайте следующие слова, обращая внимание на правила чтения гласных в ударной позиции, а также на чтение буквосочетаний гласных и согласных
  5. I, 1. В начале бе Слово.
  6. I, 14. И Слово плоть бысть.
  7. II. Слово на Рождество Господа и Бога и Спаса нашего Иисуса Христа; здесь же и против иудеев.

 

{$L 08.obj}

program pas08;

Uses crt;

type mystr = string[40];

var a: mystr;

 

procedure work(var a:mystr);

external;

 

Begin

clrscr;

 

writeln ('enter string:');

{readln (a);}

a:='aaa bbb aaa aa bbb b aaaa c a aa b c aa ';

writeln (a);

work (a);

readkey;

End.

 

.286

public work

data segment public

 

maxlen dw?;длина строки

i dw 1;индекс у слова

count db 0;сч-к одинак. слов

eti dw?;индекс у эталона

etword db 40 dup (' ');слово-эталон

etbegin dw?;начало сэталона

etend dw?;конец эталона

etlen dw?;длина эталона

nwword db 40 dup (' ');;анали-е слово (а-слово)

nwbegin dw?;начало а-слова

nwend dw?;конец а-слова

nwlen dw?;длина а-слова

data ends

;==========================================

code segment byte public

assume cs:code,ds:data

 

work proc near

push bp

mov bp,sp

pusha

 

mov si,[bp+4];Загружаем адрес предл-я

lea di,etWord;Указатель на слово-эталон

mov bx,1;Указатель на первый символ

mov etbegin,bx;Сначала эталон начинается с

; 1го символа

xor cx,cx

mov cl,byte ptr [si];Количество символов в строке

mov maxlen, cx;Запоминаем в переменной

mov eti,1;Индекс в а-слове

 

 

cycl1:;берем первое слово или ищем след. уникальное слово

mov ah,byte ptr bx[si];загружаем символ

cmp ah,' ';Если это не пробел

jne chain2;переходим к следующему символу

jmp far2;Развязка с длинной

chain2: jmp nothng1; больше 255 байт

;Теперь есть слово в etWord

far2: mov etend, bx;Запонимаем конец эталона

mov dx, bx

sub dx, etbegin;Вычисляем длину эталона

mov etlen, dx; и запоминаем ее

call out_et;Выводим эталон на экран

mov count, 1;Нашли одно слово:)

 

push bx;Сохраняем индекс строки

 

;берем след. слово

lea di, nwWord;Указатель на а-слово

mov i, 1;Индекс в А-слове

inc bx;Продолжаем просматривать исх. строку

mov nwbegin, bx;Запоминаем началоо а-слова

 

cycl2: mov ah, byte ptr bx[si];Взяли символ

 

cmp ah, ' ';Если не пробел

jne nothng2; то берем след. символ

;Тепрь а-слово в nwWord

mov nwend, bx;Запоминаем конец слова

mov dx, bx;Вычисляем

sub dx, nwbegin; длину а-слова

mov nwlen, dx; и запоминаем ее

call cmp_w;Сравниваем эталон и а-слово

cmp ax, 00;Если не равны

je neq; то ничего не делаем

;слова равны

inc count;Увеличиваем счетчик

call removew;Удаляем а-слово из предложения

mov bx, nwbegin;Снова возвращаемся к

dec bx; концу предыд. слова (на пробел)

neq:

;взять след. слово

mov i,1;Сбрасываем индекс в а-слове

inc bx;переходим на 1ый символ след. слова

mov nwbegin, bx;Запоминаем начало а-слова

cmp bx, maxlen;Достигли конца строки?

jle cycl2; - нет продолжить анализ

jmp out2;Дошли до конца предложения

 

nothng2:;сюда приходим если текущий анализируемый символ - не пробел

push bx;Сохраняем индекс строки

mov bx, i;Берем индекс а-слова

mov byte ptr bx[di], ah;Пишем в а-слово символ

pop bx;Восстанавливем индекс строки

 

inc bx;Переход к след. символу строки

inc i;Увелич-м индекс в а-слове

cmp bx, maxlen;А может достигли коца строки?

jle cycl2; - нет - продолжить анализ

out2:;теперь уже прошли по всему предложению,

;удалили слова совпадающие с Эталоном,

;подсчитали кол-во совпадений.

call out_num;Выводим кол-во совпадений

pop bx;Восстанавливаем глобольный

; индекс по строке

;тепрь надо искать след. эталон

mov etbegin,bx;Начало эталона сейчас на пробеле

inc etbegin;Переставляем на след. символ

mov eti,1;Начало записи нового эталона

;Индекс эталона на первый символ

lea di, etword;Указатель на эталон

;call strout;Вывести обработанную строку

jmp met1;перейти к след. символу исх. строки

nothng1:

push bx;сохранить глобальный индекс строки

mov bx, eti;Взять индекс в эталоне

mov byte ptr bx[di], ah;Записать текущий символ в эталон

pop bx;Восстановить глобальный индекс

inc eti;Указатель на след. символ в эталоне

met1: inc bx;Указатель след. элемент в строке

cmp bx, maxlen;А может конец строки?

jle chain1; - нет прыжок по условию

jmp far01; за 255 байт

chain1: jmp cycl1

far01:;Сюда приходим когда кончилась исходная строка

;Т.е. проанализированы все уникальный слова в строке.

 

popa

pop bp

ret 6

work endp

;==========================================

;==========================================

;Сравнение двух слов

cmp_w proc near

;в АХ - 01, если слова равны

; - 00, если не равны

;сравниваем слова

push si

push di

 

mov ax, etlen;Длина первого слова

mov dx, nwlen;Длина второго слова

cmp dx, ax;Длины равны?

jne noneq;Нет - слова не равны

 

mov ax, 0;Признак - слова не равны

cld;Потоковая обработка - вперед

lea si,etword;Адрес первого слова

lea di,nwword;Адрес второго слова

inc si;Пропустить кол-во букв

inc di;Пропустить кол-во букв

mov cx,etlen;Кол-во символо для сравнения

REPE CMPSB;Сравнивать побайтно пока

;есть совпадения

je equal

;слова не равны

noneq: mov ax, 00;Признак - слова не равны

jmp fin;Выход из процедуры

;слова равны

equal: mov ax, 01;Признак - слова равны

 

fin:

pop di

pop si

ret

cmp_w endp

;==========================================

;Вывод слова-эталона

out_et proc near

pusha

lea di, etword;Адрес слова

mov bx,01;Указатель на первый символ

mov ah,06;Функция вывода символа

mov cx,etlen;Длина слова

vivod1: mov dl,byte ptr bx[di];Взять символ

int 21h;Вывести его на экран

inc bx;Перейти к

loop vivod1; след. символу

mov dl, ' ';Вывести символ

int 21h; "пробел"

popa

ret

out_et endp

;=================================================

;Удалить слово из строки

removew proc near

pusha

mov si, [bp+4];Адресс строки

mov ax, nwbegin;Начало слова

add si, ax; в регистр

mov cx, maxlen;Длина строки

sub cx, nwbegin; минус начало слова = кол-во

; символов до конца строки

mov bx, nwlen;Длина удаляемого слова

inc bx; вместе с пробелом

sub maxlen, bx;Сразу уменьшаем длину строки

cycl3: mov ah, byte ptr bx[si];Взять символ за словом

mov byte ptr [si], ah;Заменить символ слова

inc si;Перейти к след. удаляемому символу

loop cycl3

popa

ret

removew endp

;==========================================

;Вывод числа в диапозоне от 0 до 9

out_num proc near

pusha

mov ah, 06;Функция вывод символа

mov dl, count;Число типа byte

add dl, 30h; переводим в Char

int 21h; и выводим его на экран

mov dl, 10;Выводим символ

int 21h; "конец строки"

mov dl, 13;Выводим символ

int 21h; "возрат коретки"

popa

ret

out_num endp

;==========================================

;==========================================

;Вывод строки

strout proc near

pusha

mov ah, 06h;Функция вывод символа

mov si, [bp+4];Адрес строки

mov cx, maxlen;Кол-во символов для вывода

mov bx, 1;Индекс первой буквы

cycl4: mov dl, byte ptr bx[si];взять символ

int 21h;Вывести его на экран

inc bx;Перейти к

loop cycl4; след символу

mov dl, 10;Вывести символ

int 21h;"конец строки"

mov dl, 13;Вывсети символ

int 21h;"возврат коретки"

popa

ret

strout endp

;========================================

code ends

end

 

 

Дана матрица 8 х 10 целых чисел. Найти и напечатать седловое число и его индекс. (Седловым числом называется элемент матрицы, минимальный в строке и одновременно максимальный в столбце).

 

{$L dwum.obj}

program dwumer;

uses crt;

const m=8; n=10;

Type mas=array[1..m,1..n] of integer;

masx=array[1..n] of integer;

Var c:mas;

i,j,kol:integer;

x:masx;

 

Procedure sedlo(n,m:integer; var c:mas;var x:masx; var kol:integer);

external;

 

BEGIN

randomize;

textcolor(15);

clrscr;

for i:=1 to m do

begin

for j:=1 to n do

begin

c[i,j]:=-3+random(100);

write(c[i,j]:3);

end;

writeln;

end;

writeln;

sedlo(n,m,c,x,kol);

writeln;

writeln('Количество сёдел: ',kol);

j:=1;

for i:=1 to kol do

begin

write('Седло ',i,': ',x[j],' ',x[j+1]);

inc(j,2);

writeln;

end;

readkey;

END.

 

 

.286

public sedlo

dseg segment

min dw?;минимум в строке

max dw?;максимум в столбце

ind1 dw?;номер строки с минимумом

ind2 dw?;номер строки с максимумом в этом столбце

ind3 dw?;номер столбца с минимумом для вывода в паскаль

kol dw?;кол-во сёдел

dseg ends

code segment byte public

assume cs:code, ds:dseg;

sedlo proc near

push bp

mov bp,sp

pusha

;------------------------------------------------------------

lds si,[bp+12];адрес матрицы

lds di,[bp+8];адрес массива индексов для сёдел

mov min,32000;минимум

xor dx,dx;счетчик столбцов в строке

xor bx,bx;счетчик строк

mov cx,[bp+16];число строк в матрице

main: push cx

mov cx,[bp+18];число столбцов в строке

inc bx

cycl1: inc dx;счетчик чисел в строке

mov ax,[si];в ах - число из строки

cmp ax,min;сравниваем с минимумом

jge met1;если не меньше мин. то на переадресацию

mov min,ax;иначе запоминаем минимум

mov ind1,bx;и номер строки с ним

mov ind3,dx

met1: add si,2;переадресация на след. элемент строки

loop cycl1

push si

push bx

mov bx,ind3;номер столбца с минимумом в строке

dec bx

shl bx,1;смещение до столбца от начала матрицы

lds si,[bp+12];начало матрицы

add si,bx;встали на начало столбца с минимумом

mov max,-32000;максимум

mov bx,[bp+18];число столбцов в строке

shl bx,1;смещение до след. элемента в столбце

push cx;для следующего цикла loop

mov cx,[bp+16];число столбцов

push dx;для индексов в столбце

xor dx,dx

cycl2: inc dx

mov ax,[si];число из столбца

cmp ax,max;сравниваем с максимумом

jle met2;если меньше максимума - на переадресацию

mov max,ax

mov ind2,dx

met2: add si,bx;встаем на след. в столбце элемент

loop cycl2

mov ax,ind1

cmp ax,ind2;сравниваем строку с минимумом и максимумом

jne exit;если не седло

inc kol;иначе считаем кол-во сёдел

mov [di],ax;отправили номер строки с седлом

mov ax,ind3

mov [di+2],ax;отправили номер столбца с седлом

add di,4

exit: pop dx

pop cx

pop bx

pop si

xor dx,dx;обнулили счетчик столбцов в след. строке

pop cx

loop main

;----------------------------------------------------------

lds si,[bp+4]

mov bx,kol

mov [si],bx

;----------------------------------------------------------

popa

pop bp

ret

sedlo endp

code ends

END

 

 


Дата добавления: 2015-08-02; просмотров: 97 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
В массиве Z[1..N] определить сумму нечетных чисел от последнего нулевого значения до Z[N] и среднее арифм. четных до последнего нуля.| В массиве A[1..15] определить минимальное значение. Все числа, лежащие за минимальным записать в новый массив В и определить в нем среднее арифметическое положительных чисел.

mybiblioteka.su - 2015-2024 год. (0.033 сек.)