Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Postado

Oi pessoal, estou tentando entender esse algoritmo, mas estou iniciando agora nessa área e consigo mais entender programas em VisualG, quero entender esse algoritmo, porém ele está em C, se alguém transformasse para VisualG eu ficaria grato :)

#include <stdio.h>

int main( void )

{

int a[ 3 ][ 3 ], soma = 0;

int i, j, tentativas;

for( i = 0; i < 3; ++i )

     for( j = 0; j < 3; ++j )

         scanf("%d", &a[ i ][ j ]);

for( i = 0; i < 3; ++i )

      if( (a[ i ][ 0 ] == 0) + (a[ i] [ 1 ] == 0) + (a[ i ][ 2 ] == 0) == 0 )

          soma = a[ i ][ 0 ] + a[ i ][ 1 ] + a[ i ][ 2 ];

for( j = 0; j < 3; ++j )

      if( (a[ 0 ][ j ] == 0) + (a[ 1 ][ j ] == 0) + (a[ 2 ][ j ] == 0) == 0 )

           soma = a[ 0 ][ j ] + a[ 1 ][ j ] + a[ 2 ][ j ];

if( (a[0][0] == 0) + (a[ 1 ][ 1 ] == 0) + (a[ 2 ][ 2 ] == 0) == 0 )

       soma = a[ 0 ][ 0 ] + a[ 1 ][ 1 ] + a[ 2 ][ 2 ];

if( (a[0][2] == 0) + (a[ 1 ][ 1 ] == 0) + (a[ 2 ][ 0 ] == 0) == 0)

       soma = a[ 0 ][ 2 ] + a[ 1 ][ 1 ] + a[ 2 ][ 0 ];

if( soma == 0 )

{

for( i = 0; i < 3; ++i )

      for( j = 0; j < 3; ++j )

           soma += a[ i ][ j ];

soma /= 2;

}

for( tentativas = 0; tentativas < 3; ++tentativas ) {

       for( i = 0; i < 3; ++i )

             for( j = 0; j < 3; ++j ) {

/*Testa mesma linha*/

if( (a[ i ][ j ] == 0) && (a[ i ][ 0 ] == 0) +

       (a[ i ][ 1 ] == 0) + (a[ i ][ 2 ] == 0) == 1 )

   a[ i ][ j ] = soma - a[ i ][ 0 ] - a[ i ][ 1 ] - a[ i ][ 2 ];

/*Testa mesma coluna*/

if( (a[ i ][ j ] == 0) && (a[ 0 ][ j ] == 0) +

      (a[ 1 ][ j ] == 0) + (a[ 2 ][ j ] == 0) == 1 )

  a[ i ][ j ] = soma - a[ 0 ][ j ] - a[ 1 ][ j ] - a[ 2 ][ j ];

      }

}

for( i = 0; i < 3; ++i ) {

      for( j = 0; j < 3; ++j)

           printf( "%d ", a[ i ][ j ] );

      printf( "\n" );

     }

return 0;

}

  • Curtir 1
Postado

Olá, legal ver outra pessoa se inturmando na área, seja bem vindo!
Eu estudo no IFSC e sei  que a apostila lhe ajudará, conforme professores dos intituto se cooperam e meu forneceu estou lhe ajudando da melhor forma possivel. Mas aviso que não deve haver qualquer meio comercial para estas apostilas e elas devem ser usadas para estudos! 

Siga o link e vai ter o que for nescessário, lembre-se, vou revogar dentro de 186h.
Bons estudos

https://1drv.ms/f/s!AhyBCocGSwnnhE4ASWimadEDQZXC

 

 

  • Curtir 1
Postado

@Samuel Barbosa Ramos   esse código   apenas imprime os nove números que forem inseridos nele,  mas se você quer converte-lo então substitua os comandos, por exemplo :

no lugar desse vetor

int a[ 3 ][ 3 ]

coloque

a : vetor[0..2,0..2] de inteiro

no lugar de int soma=0 coloque soma : real

no lugar de for coloque para e coloque o respectivo fimpara
no lugar de if coloque se e coloque o respectivo fimse
no lugar de printf coloque escreva( )
no lugar de printf ("\n"); coloque escreval
no lugar de

 if( (a[ i ][ 0 ] == 0) + (a[ i] [ 1 ] == 0) + (a[ i ][ 2 ] == 0) == 0 )

coloque

  se (a[i,0])+(a[i,1])+(a[i,2])=0 ENTÃO

e nos outros   ifs    faça do mesmo jeito .     e nos para coloque para ir de zero ate 2  assim 

para i de 0 ate 2 faca


   aqui no fórum não podemos dar códigos prontos, pois é contra as regras,  então faça a conversão do código e poste aqui para vermos como está e em que podemos ajudar .

  • Curtir 1
Postado

Fala que esperava encontrar um expressão do tipo lógico para essa linha (se ((m[l,0]=0)+(m[l,1]=0)+(m[l,2]=0)=0) então), alguem pode me ajudar com esse probleminha

 

Var
   // Seção de Declarações das variáveis
   m: vetor[0..2,0..2] de inteiro
   l, c, soma, t: inteiro

Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...
   escreval ("Para os dígitos roubados insira o numero 0 (zero)")
   para l de 0 ate 2 faca
      para c de 0 ate 2 faca
         escreva ("Insira os números um por um, de acordo com a ordem em que aparecem na horizontal:")
         leia (m[l,c])
      fimpara
   fimpara
   para l de 0 ate 2 faca
      se ((m[l,0]=0)+(m[l,1]=0)+(m[l,2]=0)=0) então
         soma<-m[l,0]+m[l,1]+m[l,2]
         para c de 0 ate 2 faca
            se ((m[0,c]=0)+(m[1,c]=0)+(m[2,c]=0)=0) então
               soma<-m[0,c]+m[1,c]+m[2,c]
               se ((m[0,0]=0)+(m[1,1]=0)+(m[2,2]=0)=0) então
                  soma<-m[0,0]+m[1,1]+m[2,2]
                  se ((m[0,2]=0)+(m[1,1]=0)+(m[2,0]=0)=0) então
                     soma<-m[0,2]+m[1,1]+m[2,0]
                     se soma=0 então
                        para l de 0 ate 2 faca
                           para c de 0 ate 2 faca
                              soma<-soma+m[l,c]
                              soma<-soma/m[l,c]
                              para t de 0 ate 2 faca
                                 para l de 0 ate 2 faca
                                    para c de 0 ate 2 faca
                                       se ((m[l,c]=0) e (m[l,0]=0)+(m[l,1]=0)+(m[l,2]=0)=1) então
                                          m[l,c]<-soma-m[l,0]-m[l,1]-m[l,2]
                                          se ((m[l,c]=0) e (m[0,c]=0)+(m[1,c]=0)+(m[2,c]=0)=1) então
                                             m[l,c]<-soma-m[0,c]-m[1,c]-m[2,c]
                                             para l de 0 ate 2 faca
                                                para c de 0 ate 2 faca
                                                   escreva (m[l,c]
                                                   escreval ("")
                                                fimpara
                                             fimse
                                          fimpara
                                       fimse
                                    fimse
                                 fimse
                              fimse
                           fimpara
                        fimpara
                     fimpara
                  fimpara
               fimpara
            fimse
         fimse
      fimpara
   fimpara

  • Curtir 1
Postado

@Samuel Barbosa Ramos       seu código não está funcionando, por que você não observou que em c os loop for começam com { e termina com  ou também no caso de houver apenas  uma linha depois do for ou do if ele não terá esses caractere   { }  e funciona bem mesmo assim,  então reorganizei seu código e ele ficou assim :

Algoritmo "convert de c para visualg"
var
  a : vetor [0..2,0..2] de inteiro
  i,j,tentativas,p : inteiro
  soma : real
inicio
  p:=1
  para i de 0 ate 2 faca
    para j de 0 ate 2 faca
      escreva("Digite O ",p," Número ")
      leia(a[i,j])
      p:=p+1
    fimpara
  fimpara
  para i de 0 ate 2 faca
    se (a[i,0])+(a[i,1])+(a[i,2])=0 ENTÃO
      soma:= a[i,0]+a[i,1]+a[i,2]
    fimse
  fimpara
  para j de 0 ate 2 faca
    se (a[0,j])+(a[1,j])+(a[2,j])=0 ENTÃO
      soma := a[0,j]+a[1,j]+a[2,j]
    fimse
  fimpara
  se (a[0,0])+(a[1,1])+(a[2,2])=0 ENTÃO
    soma:=a[0,0]+a[1,1]+a[2,2]
  fimse
  
  se (a[0,2])+(a[1,1])+(a[2,0])=0 ENTÃO
    soma:=a[0,2]+a[1,1]+a[2,0]
  fimse
  
  se soma=0 ENTÃO
    para i de 0 ate 2 faca
      para j de 0 ate 2 faca
        soma:=soma+a[i,j]
        soma:=soma/2
      fimpara
    fimpara
  fimse
  para tentativas de 0 ate 2 faca
    para i de 0 ate 2 faca
      para j de 0 ate 2 faca
        ///*Testa mesma linha*/
        se (a[i,j]) e (a[i,0])+(a[i,1])+(a[i,2])=1 ENTÃO
          a[i,j]=soma-a[i,0]-a[i,1]-a[i,2]
        fimse
        ///*Testa mesma coluna*/
        se (a[i,j]) e(a[0,j])+(a[1,j])+(a[2,j])=1 ENTÃO
          a[i,j]:=soma-a[0,j]-a[1,j]-a[2,j]
        fimse
      fimpara
    fimpara
  fimpara
  para i de 0 ate 2 faca
    para j de 0 ate 2 faca
      escreva(a[i,j])
    fimpara
    escreval
  fimpara
Fimalgoritmo

 

Postado

@devair1010

Um quadrado é chamado mágico quando a soma dos elementos de uma determinada linha, coluna ou diagonal é sempre igual.

Escreva um programa que, dado um quadrado mágico com alguns números faltando (só pode faltar até 3 números), determine qual era o quadrado mágico original. Quando for inserido "0" significa que é um número faltando

Seu programa deve imprimir, na saída padrão, três linhas, cada uma contendo três inteiros, descrevendo a configuração original do quadrado mágico.

 um quadrado mágico pois ao somar qualquer linha, coluna ou diagonal o resultado é sempre igual (no caso vai ser 15) :

4  9  2

3  5  7

8  1  6

 

então o usuario vai entrar assim: 0 12 12      e o programa deve imprimir: 6 12 12
                                                       16 10 0                                                  16 10 4
                                                       8 8 14                                                      8 8 14
                                                                                                                 
                                                   

  • Curtir 1

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!