Ir ao conteúdo

C Faça um programa que calcula a raiz quadrada de um número EM NEANDER e EM C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Olá gente, venho aqui com uma duvida gigantesca em como transformar esse codigo em C em Neander.

 

//  Faça um programa que calcula a raiz quadrada de um número
//  Assuma que apenas números que possuem raiz quadrada inteira serão passados para o programa (e.g. 4, 9, 16, etc)
//  Você não precisa implementar o algoritmo para números que não possuem raiz quadrada inteira, e.g. 3, 5, 11, etc
//
#include <stdio.h>

int main()
{
    int numero, raiz;
    printf("Digite um Numero:");
    scanf("%d",&numero); 
    raiz = sqrt(numero);
    printf("Raiz = %d \n",raiz);
    return 0;
}

 

Não faço ideia como implementar isso em Neander se conseguirem me ajudar 🙂

  • Obrigado 1
  • Confuso 1
  • Solução
Postado

@Sathosi   @Sathosi           o enunciado não diz , mas creio que seria para criar um programa que calcula a raiz Quadrada , e não usar uma função   , "sqrt()" ,   já pronta  da linguagem C  ,   e também não precisa pegar o número  pois será usado aqueles do exemplo , que tem Raiz exata , e para   extrair a raiz Quadrada   você pode usar a multiplicação , 

#define     WIN32_WINNT 0x600
#include    <stdio.h>
#include    <conio.h>
#include    <stdlib.h>
#include    <string.h>
#include    <windows.h>
#define     _h GetStdHandle(STD_OUTPUT_HANDLE)
///  Faça um programa que calcula a raiz quadrada de um número
///  Assuma que apenas números que possuem raiz quadrada inteira
///  serão passados para o programa (e.g. 4, 9, 16, etc)
///  Você não precisa implementar o algoritmo para números que
///  não possuem raiz quadrada inteira, e.g. 3, 5, 11, etc
int raizQuadrada( int );
int main()
{
  int numero = 81;
  int raiz   = 0;
  printf( "Digite um Numero -: ");
  /// scanf ( "%d"  , &  numero     );
  raiz  = raizQuadrada( numero );/// sqrt(numero);
  printf("Raiz = %d \n",raiz);
  return 0;
}
int raizQuadrada( int x )
{
  int y = 1;          /// combinado no enunciado que
  while( y * y != x ) /// só vai receber num inteiro e posit
  {                   /// e com raiz exata
    if( y * y != x )
    {
      y++;
    }
  }
  if( y<=x )return y;
  return 0;
}

e é claro que a multiplicação também é outra função  que pode ser simplificada usando somas sucessivas ,  e em C não tem necessidade  , mas no neanderWin , sim ,  pois esse compilador  do hipotético processador "neander"  tem apenas comando básicos elementares ,  de armazenamento , soma , subtração e comparações ,  assim uma simples multiplicação da linguagem C se torna bem trabalhosa sesse compilador neaderWin ,   que você pode baixar nesse site   
https://sourceforge.net/projects/neander-x/
baixe o neander X , que é o mesmo neanderwin

 

;--------------------------------
; Programa -: Multiplic
; Autor ----: Devair
; Data -----: 11/12/2022
;--------------------------------
org 0
ldi 0    ; carrega A com val 0
sta 128  ; valor iniciaL 
ldi 1    ; increment do loop
sta 129  ; guard em end 129
ldi 7    ; num p multipl
sta 130  ; Multiplicando
L1:      ; inicio do loop
sta 131  ; Multiplicad qtd vezes
jz fim   ; se for zero pula p fim
lda 128  ; carrega acumulador A
add 130  ; soma com conteu end
sta 128  ; armaz nesse ender
lda 131  ; carreg acumul A
sub 129  ; subtrai 1 
jmp L1   ; jump incond p L1
fim:     ; label
lda 128  ; carrega o valor calc
out 0    ; mostra result
hlt      ; termino do prg

e  a raiz Quadrada também pode ser calculada  com esse programa  ,  fazendo nele alguma adaptações  .

  • 2 semanas depois...
Postado

@Sathosi    esse código  modificado para extrair a raiz Quadrada  do número 81 :

;--------------------------------
; Programa -: Raiz Quadrada
; Autor ----: Devair
; Data -----: 23/12/2022
;--------------------------------
            ; aqui no editor os valores estão na Base 10 ( DecimaL )
            ; no Visor e nas Flag's estão escritos na
            ; Base 16 , ( HexadacimaL )
            ; As variAveis sAo Opcionais , pois podem ser substituIdas
            ; pelos respectivos endereCos
  a equ 128 ; a = endereCo de memória 128 
  b equ 129 ; b = endereCo de memória 129 
  c equ 130 ; c = endereCo de memória 130 
  x equ 131 ; x = endereCo de memória 131 
  y equ 132 ; y = endereCo de memória 132 
org 0       ; inIcio Do Programa
  ldi 0     ; carrega Registrador/Acumulador A com valor zero
  sta a     ; valor iniciaL Das MultipliCOes
  ldi 81    ; nUmero decimal para extrair raiz Quadrada
  sta y     ; armazena no endereCo y = 132
  ldi 1     ; carrega Registrador/Acumulador A com valor zero
  sta b     ; incremento do loop
  sta c     ; nUmeros sequenciais comeCa em 1 p ver se eh a Rzq
L0:         ; Label L0
  lda c     ; eh o Multiplicando
  sta c     ; e o MultiplicadoR , pois eh RzQ , ( num x mesmo )
L1:         ; Label L1 , inIcio do loop Q faz a multipl
  sta x     ; Multiplicad qtd vezes
  lda a     ; Acumulador A com qtd de x somar
  add c     ; soma com o mesmo nUmero ( num x num )
  sta a     ; O vaLor do increMento
  lda x     ; eh O Num p Extrir a QzQ
  sub b     ; diminuiu mais um
  jnz L1    ; se não for zero volta a L1 p somar de novo
fim:        ; Label Final da MultiplicaAo
  lda a     ; carrega o resultado da multipl 
  out 0     ; mostra result da multipl
  lda y     ; carrega A com val do num extr raiz
  sub a     ; subtrai o result da multipl
  jz rzq    ; se res da subtr for zero pula p rzq
  lda c     ; carrega num em test
  add b     ; incrementa esse num testado
  sta c     ; armazena esse novo num
  ldi 0     ; carrega Acumulador A com val zero
  sta a     ; guarda p inicio da nova multiplic
  jmp L0    ; volta p testar esse novo num
rzq:        ; Label da raiz Quadrada Que já foi achada
  lda c     ; eh a raiz quadrada
  out 0     ; mostra a raiz quadrada
hlt         ; Termino do Programa

na tela do neanderWin observe que cada número , na base Decimal , será multiplicado por ele mesmo  e o resultado  mostrado no visor , no sistema Hexadecimal  , enquanto não encontrar a raiz quadrada , do número que se quer saber a raiz quadrada , e as flag's irão se mover ,  mas ao encontrar a raiz quadrada essas flag's  irão para de se movimentar .e o resultado estará no visor em Hexadecimal .

neanderWin2.jpg.c745e0477971a8ec31c94007daee8d0e.jpg

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!