Ir ao conteúdo
  • Cadastre-se

CHeed

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

posts postados por CHeed

  1. Comecei a passar o código pra assembly ele está mostrando o numero anterior mas o seguinte não e não consigo enxergar onde está o erro se alguém puder ajudar o código esta assim:

     

    .data
    
       msg1: .asciiz"\nDigite um numero entre 1 e 50000: "
       msg2: .asciiz"\nO valor que voce digitou esta incorreto digite novamente."
       msg3: .asciiz"\nNao ha numero primo antes desse valor. "
       msg4: .asciiz"\nO primo anterior foi : "
       msg5: .asciiz"\nO primo posterior foi : "
       
    .text
    
    main:
    	#mostra(msg1)
    	li $v0, 4
    	la $a0, msg1
    	syscall
       
    	#ler(msg1)
    	li $v0, 5
    	syscall
       
    	add $t1, $0, $v0 #t1 é o numero digitado		
       
    	#Validação do numero digitado:
    
    	blt $t1, 1, se1
    	bgt $t1, 50000, se1
    	beq $t1, 2, qfor2
    
    	j comeco
     
    se1:
    	#mostra(msg2)
    	li $v0, 4
    	la $a0, msg2
    	syscall
       
    	j main
       
    qfor2:
    	#mostra(msg3)
    	li $v0, 4
    	la $a0, msg3
    	syscall
       
    	j depois
    comeco:
    	add $t0, $zero, 2
    for1:
    	#$t0 = i
    	#$t2 = cont
    	#$t3 = j
    	#$t4 = resto
    	add $t2, $zero, 0
    	add $t3, $zero, 1
    for2:
    	rem $t4, $t0, $t3
    	beq $t4, 0, contsoma
    	possoma:
    	add $t3, $t3, 1
    ble $t3, $t0, for2
    	beq $t2, 2, antes
    	dantes:	
    	add $t0, $t0, 1 
    blt $t0, $t1, for1
    
    	#mostrar o antes
    	li $v0, 4
    	la $a0, msg4
    	syscall
    	
    	li $v0, 1
    	add $a0, $t5, $zero
    	syscall
    	
    	j depois
    	
    contsoma:
    
    add $t2, $t2, 1
    j possoma
    
    antes:
    	#$t5 = antes
    	add $t5, $t0, $zero 
    	j dantes
    
    depois:
    	#t0 = x
    	#t2 = cont
    	#t3 = i
    	#t4 = resto
    	#t1 = n
    	#t5 = j
    	#t6 = n - 1
    	#t7 = depois
    	add $t0, $zero, 1
    forx:
    	add $t1, $t1, 1
    	sub $t6, $t1, 1
    	move $t3, $t6
    fori:
    	add $t2, $zero, 0
    	add $t5, $zero, 1
    forj:
    	rem $t4, $t3, $t5
    	beq $t4, 0, somacont2
    	possoma2:
    blt $t5, $t3, forj
    	beq $t2, 2, ndepois
    	posdepois:
    blt $t0, $t6, fori
    blt $t0, $t1, forx
    
    	#mostrar primo depois
    	li $v0, 4
    	la $a0, msg5
    	syscall
    	
    	li $v0, 1
    	move $a0, $t7
    	syscall
    	
    	j fim
    somacont2:
    	add $t2, $t2, 1
    	j possoma2
    	
    ndepois:
    	add $t7, $t3, $zero
    	move $t0, $t1
    	j posdepois
    
    fim:
    

     

    • Amei 1
  2. @devair1010

    20 minutos atrás, devair1010 disse:

    @CHeed    você está usando o cont para contar a quantidade de números que não são primos , e a quantidade de números entre um primo e outro não é sempre igual .

        Qual compilador você está usando para o assembler ?    seria o  neander win ?

    não entendi a parte do cont porque o código está rodando funcional aqui ele verifica quantos divisores tem se tiver 2 divisores ele joga em primo, estava tentando passar pra MIPS PcSpim.

    • Curtir 1
  3. @devair1010 Consegui fazer terminar o código hoje sozinho, porém agora queria ajuda pra passar pra Assembly mesmo

    não consigo entender muito bem como funciona os laços em Assembly.

     

    meu código finalizado ficou assim:

     

    'Fazer um algoritmo que receba um número (1 < número <= 50000) e demonstre o primeiro número primo após a ele e o primeiro número primo antes dele.
    
    Sub Primo()
    Dim i As Integer
    Dim n As Integer
    Dim j As Integer
    Dim antes As Integer
    Dim cont As Integer
    Dim depois As Integer
    
    n = InputBox("Digite um número entre 1 e 50000: ")
    
    If n = 2 Then
       MsgBox ("Não há número primo antes dele.")
       GoTo depois:
       End If
       
    If n < 1 Then
    
    MsgBox ("Digite um valor correto.")
    
    n = InputBox("Digite um número entre 1 e 50.000: ")
    
    Else
        If n > 50000 Then
           
           MsgBox ("Digite um valor correto.")
    
           n = InputBox("Digite um número entre 1 e 50.000: ")
           
           End If
           End If
                 
           For i = 1 To n
           
              cont = 0
              
                For j = 1 To i
                
                 If i Mod j = 0 Then
                 
                 cont = (cont + 1)
                 
                 End If
                 
                 Next j
                 
                 If cont = 2 Then
                 
                 antes = i
                 
                 End If
                 
                 Next i
                 
                 MsgBox ("O primo antes do número digitado é: " & antes)
                 
                 
    depois:
                 For x = 1 To n
                 
                     n = n + 1
                        
                 For i = n - 1 To n
           
              cont = 0
              
                For j = 1 To i
                
                 If i Mod j = 0 Then
                 
                 cont = (cont + 1)
                 
                 End If
                 
                 Next
                 
                 If cont = 2 Then
                 
                 depois = i
                 
                 x = n
                 End If
                 
                 Next
                 Next
                 
                 MsgBox ("O número primo depois do número digitado é: " & depois)
                 
    End Sub
    

     

    • Obrigado 1
  4. O algoritmo em questão é esse:

     

    Fazer um algoritmo que receba um número (1 < número <= 50000) e demonstre o primeiro número primo após a ele e o primeiro número primo antes dele.

     

    Tenho que fazer ele em Assembly, porém fiz um teste primeiro em macro porquê foi onde eu aprendi consegui mostrar o numero primo antes do número digitado entretanto, não faço ideia de como chegar no valor após ele se alguém puder ajudar.

     

     

    Isso foi o que consegui fazer:

     

    Sub Primo()
    Dim i As Integer
    Dim n As Integer
    Dim j As Integer
    Dim r As Integer
    Dim cont As Integer
    
    n = InputBox("Digite um número entre 1 e 50000: ")
    
    If n < 1 Then
    
    MsgBox ("Digite um valor correto.")
    
    n = InputBox("Digite um número entre 1 e 50.000: ")
    
    Else
        If n > 50000 Then
           MsgBox ("Digite um valor correto.")
           n = InputBox("Digite um número entre 1 e 50.000: ")
           End If
           End If    
           For i = 1 To n
              cont = 0
                For j = 1 To i
                 If i Mod j = 0 Then
                 cont = (cont + 1)
                 End If
                 Next
                 If cont = 2 Then
                 r = i
                 End If
                 Next 
                 MsgBox ("O primo antes do número digitado é: " & r)
    End Sub


     

    • Amei 1

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!