Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andreiaoliveira

Multiplicação de matrizes

Recommended Posts

Olá pessoal,bom dia!

Minha professora de SO passou esse algoritmo e disse que pode ter algum problema com ele.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void printMatrix(float *m, float w, float h){
   int i, j;

   printf("\n");

   for (j = 0; j < h; j++){
      for (i = 0; i < w; i++){
         int k = j * w + i;
         printf("%.2f ", m[k]);
      }
      printf("\n");
   }

}

int main (int argc, char **argv){
   float *A = NULL, *B = NULL, *C = NULL;
   int iA, jA, iB, jB, iC, jC;
    int width = atoi(argv[1]), height = atoi(argv[2]);// align = atoi(argv[3]);

   A = (float*) malloc(width * height * sizeof(float));
   B = (float*) malloc(width * height * sizeof(float));
   C = (float*) malloc(width * height * sizeof(float));
/*
   posix_memalign((void*)&A, align, width * height * sizeof(float));
   posix_memalign((void*)&B, align, width * height * sizeof(float));
   posix_memalign((void*)&C, align, width * height * sizeof(float));
   
*/
   printf("\nMultiplicando matriz\n");
   for (jC = 0; jC < height; jC++){
      for (iC = 0; iC < width; iC++){
         int kC = jC * width + iC;
         A[kC] = (float) kC + 1;
         if (jC == iC)
            B[kC] = 1.0f;
         else
            B[kC] = 0.0f;
         
      }
   }

   
   int steps= 0;
   for (jC = 0; jC < height; jC++){
      for (iC = 0; iC < width; iC++){
         int kC = jC * width + iC;
         float aux = 0.0f;
         jA = jC;
         c
         C[kC] = aux;      
      }//end-      for (iC = 0; iC < 2; iC++){
   }//end-for (jC = 0; jC < 2; jC++){

   printMatrix(C, width, height);
   printf("\n%d\n", steps);
   free (A);
   free (B);
   free (C);
   return EXIT_SUCCESS;
}

Acredito que o problema esteja aqui,

for (iA = 0; iA < width; iA++){
            jB = iA;
            iB = iC;
            int kA = jA * width + iA;
            int kB = jB * width + iB;
            aux += A[kA] * B[kB];
            steps++;
         }

mas nao tenho certeza...

 

Alguem me ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

1- Identifique o objetivo do algoritmo. Se o professor falou o que ele faz ou deveria fazer, já é um começo. P/ gente do fórum fica mais difícil porque nem sabemos porque o posix_memalign está comentado ou porque colocaram isso ali.

 

2- Execute o algoritmo passo a passo p/ entradas diferentes e veja se o objetivo é atingido.

 

Obs.: isso não é C++. Letras minúsculas e maiúsculas não são necessariamente erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<form method="POST" action="index.php">
Digite um numero: <input type="text" name="n"/>
<input type="submit" value="confirmar"/>
</form>

esse seria um formulario para o usuario digitar o valor de entrada (ai não seria um numero fixo).

<?php
 
if(isset($_POST['n'])){//verifica se o usuario digitou algum valor e submeteu no form.
    $n= $_POST['n'];
 
    // ---------------- %10-------------------- 01
    if ($n %  10 ==  0)
    {
        echo $n . " é divisível por 10 =  " . $n/10 . "<br>";}
    else
    {
        echo $n . " nao divisível por 10 <br>";
    }
 
    //--------------------%5-------------------02
    if ($n %  5 ==  0)
    {
        echo $n . " é divisível por 5 =  " . $n/5 . "<br>";
    }
    else
    {
        echo $n . " nao divisível por 5 <br>";
    }
    //------------------%2----------------------03
    if ($n %  2 ==  0)
    {
        echo $n . " é divisível por 2 =  " . $n/2 . "<br>";
    }
    else
    {
        echo $n . " nao divisível por 2 <br>";
    }
 
}
else echo "informe um numero"; //caso o usuario nao tenha submetido algum numero, apenas exiba.
?>

ai você verifica no php se ja existe o valor digitado.

Essa é apenas uma sugestão para não deixar o numero estático.

 

 

 

1- Identifique o objetivo do algoritmo. Se o professor falou o que ele faz ou deveria fazer, já é um começo. P/ gente do fórum fica mais difícil porque nem sabemos porque o posix_memalign está comentado ou porque colocaram isso ali.

 

2- Execute o algoritmo passo a passo p/ entradas diferentes e veja se o objetivo é atingido.

 

Obs.: isso não é C++. Letras minúsculas e maiúsculas não são necessariamente erros.

QUAL É LINGUAGEM USADA

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é um código escrito em C.
Em C++, "a rigor", se utiliza o cabeçalho iostream p/ entrada e saída via teclado/monitor. Isso não quer dizer que programadores C++ não usem a cstdio (que contém os scanf e printf da vida). Detalhe: os cabeçalhos definidos no padrão não possuem o .h no final.

http://www.cplusplus.com/doc/tutorial/basic_io/
http://www.cs.rit.edu/~mjh/docs/c++-faq/input-output.html#faq-15.1
http://programmers.stackexchange.com/questions/127023/why-is-include-iostream-h-bad

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.