PDA

Просмотр полной версии : Помогите плиз с задачей


netzzz
25.01.2008, 11:40
Нужно в течение часа решить задачу, кто поможет с меня плюсенгов...

Ввести строку, состоящую из одного слова, проверить будет ли оно читаться одинаково справа на лево и слева на право (т.е. является ли оно палиндромом). Исходную строку и ответ вывести на экран.

spider-intruder
25.01.2008, 11:46
Язык какой?

netzzz
25.01.2008, 12:11
ой сорр асемблер

iddqd
25.01.2008, 12:14
Я помню у нас в универе на си такая задачка была- несложная...
А на асме страниц 5 кода будет...)))

gibson
25.01.2008, 12:20
пробуй

#include <conio.h>
#include <stdio.h>
void main()
{char s1[100],s2[100]="";
unsigned int ks1 = int(s1),ks2 = int(s2);
unsigned int l,r;
clrscr();
gets(s1);
asm{
mov dx,0
mov bx, ks1
dec bx
}
l0:
asm{
inc bx
mov cx, bx
mov ah, [bx]
cmp ah,0
je fin
mov al,[bx+1]
cmp al,0
je fin
}
l1:
asm{
mov al, [bx]
cmp al, 32
je l2a
cmp al,0
je l2a
inc bx
jmp l1
}
l2a:
asm{
push bx
push cx
dec bx
mov r,bx
mov l,cx
push ax
}
l2a1:
asm{
mov bx,r
mov cx,l
mov ah,[bx]
mov bx,cx
mov al,[bx]
cmp bx,cx
jna l2a2
cmp ah,al
jne l2a2
dec r
inc l
jmp l2a1
}
l2a2:
asm{
cmp ah,al
jne l4
pop ax
cmp al,0
je fin
pop cx
pop bx
jmp l0
}
l4:
asm{
pop ax
pop bx
pop cx
inc cx
}
l3:
asm{
push bx
mov bx, ks2
add bx,dx
mov [bx],ah
inc dx
pop bx
inc bx
mov ah,[bx]
cmp bx,cx
jne l3
dec bx
cmp ah,0
jne l0
}
fin:
printf("%s",s2);
}

else
http://phorum.key.ru/viewtopic.php?f=34&t=34754
http://forum.woweb.ru/topic29962.html
http://devoid.com.ua/functions-about/c-functions/strrev.html
http://sourcecore.net/forums/viewtopic.php?p=4550&sid=cb5fdffbe787b000f206dd4b8a1af74c
http://phorum.key.ru/viewtopic.php?t=32218
http://kitnet.s42.asu.ru/www/olimp/asm/z3/z3.htm
money
http://foxweb.net.ru/files/?arc=1

spider-intruder
25.01.2008, 12:21
На си если то вот как то так :-)
(криво но пашет- строка проверяется не до середины а в 2 стороны поностью - не оптимально! Зато быстро :-))

#include "stdio.h"
#include "string.h"

void main(int argc, char* argv[])
{
if(argc==1)
{
printf("USE: polindrom.exe string.\r\n");

}
else
{
char * str = argv[1];
int i;
int Sz=(strlen(str));

for(i=0;i<=Sz;i++)
{
if(str[i]!=str[(Sz-1)-i])
{
printf("Its not a polindrom :-(");
return;
}
}
printf("Its a polindrom :-)");

}
}

netzzz
25.01.2008, 12:32
все всем спасибо сам решил .. приду на работу почитаю всем плюсенгов наставлю )))

netzzz
25.01.2008, 12:35
.Model small
.stack 100h
include macr.inc
.data
f db "Введи слово",0ah,0dh,"$"
fn db "Не полиномы",0ah,0dh,"$"
fp db "Полиномы",0ah,0dh,"$"
rett db 0ah,0dh,"$"
s db " $"
p db 0
len dw 0
.code
jmp start

ASSUME ds:@data,es:@data
start:
init_dses

out_str f
in_str s
mov len,ax

mov di, offset s
mov si,di
add si,len
sub si,3
mov cx,len
sub cx,3
go: mov al,[si]
cmp [di],al
jne nepolinom
inc di
dec si
loop go

out_str fp
jmp exit
nepolinom:
out_str fn

exit:

int 27h
end start

macr.inc

init_ds macro
mov ax,@data
mov ds,ax
xor ax,ax
endm

init_dses macro
mov ax,@data
mov ds,ax
mov es,ax
xor ax,ax
endm



out_str macro st
push ax
mov ah,09h
mov dx,offset st
int 21h
pop ax
endm

clr macro rg
xor rg,rg
endm

in_str macro st
mov ah, 3fh
mov bx,0h
lea dx,st
mov cx,99
int 21h
endm

find_c macro len, st

; mov al,'&char'
cld
mov di,offset st
mov cx,len
repne scas st
endm

in_char macro char
push ax
mov ah,1h
int 21h
mov char,al
pop ax
endm

out_char macro char
push ax
mov ah,2h
int 21h
pop ax
endm