DIGOW Postado Junho 23, 2005 Denunciar Share Postado Junho 23, 2005 Pessoal estou precisando de ajudaMeu professor passou um trabalho para completar o programa que ele deu, porque a turma é iniciante ainda, o trabalho é esse:Multiplicação de matrizesEscreva um programa que recebe como parâmetros um inteiro n, sendo n potência de 2,e possívelmente '-S' para utilizar o método de multiplicação de matrizes de Strassen.O seu programa deve gerar 2 matrizes aleatórias n x n e mutiplicá-las, e imprimir o tempo de execução gasto.O programa do professor é esse:------------------------------------------------------------------------------------------------#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>void metodostrassen (int *mat1, int *mat2, int b0, int c0, int tam){int a;/*Partindo a matriz*/if (tam>2){a= tam>2;metodostrassen (mat1, mat2, b0, c0, a);metodostrassen (mat1, mat2, b0+a, c0, a);metodostrassen (mat1, mat2, b0, c0+a, a);metodostrassen (mat1, mat2, b0+a, c0+a, a);}else{/*formulas*/}}int testan (int n) {int x,y,c;c=n; do{ x=c%2; y=c/2; c=y; } while(x!=1 && y>1); if(x==0 && y==1) { return n; } else { n=0; puts("Digite novamente:"); scanf("%d", &n); testan (n); }}int main (int argc, char* argv[]){ int *mat1, *mat2, *mat3; int i, j, k, s, z, n ; time_t t1,t2; mat1=(int*)malloc(n*sizeof(int)); mat2=(int*)malloc(n*sizeof(int)); mat3=(int*)malloc(n*sizeof(int)); t1=time(NULL); s=0; if(argc<2 || argc>3){ printf("Est errado: primeiro digita a ordem da matriz e depois se quiser pelo metodo de strassen digita -s"); return(1);} else{ n=atoi(argv[1]); n=testan(n); /* printf("essa é a ordem da matriz:%d\n",n);*/ if(argc==3){ if(strcmp(argv[2], "-s")){ s=1;}}} srand(time(NULL)); for(i=0; i<n; i++){ for(j=0; j<n; j++){ mat1[i*n+j]= rand()%100; mat2[i*n+j]= rand()%100; /* printf("%d ", mat1[i*n+j]); printf("%d ", mat2[i*n+j]); */ } /* printf("\n");*/ } if(s==0){ for(i=0; i<n; i++){ for(j=0; j<n; j++){ z=0; for(k=0; k<n; k++){ z+=mat1[i*n+k]*mat2[k*n+j]; } mat3[i*n+j]=z; } } /* printf("\n\n"); printf("matriz1*matriz2=\n"); for(i=0; i<n; i++){ for(j=0; j<n; j++){ printf("%d ", mat3[i*n+j]); } printf("\n"); } printf("\n");*/ t2=time(NULL); printf("tempo de execucao=%lf",difftime(t2,t1)); return(0);} else{ metodostrassen (mat1, mat2, 0, 0, n); } }------------------------------------------------------------------------------------------------Agora só falta completar botando as formulas e oque mais faltaralguém pode me da um help porque não sei como fazerPS: Tenho que entregar o trabalho no sábado 25/06Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Junho 23, 2005 Denunciar Share Postado Junho 23, 2005 O que você não está conseguindo fazer brother?Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DIGOW Postado Junho 24, 2005 Autor Denunciar Share Postado Junho 24, 2005 Oi, não estou conseguindo fazer ele rodar, preciso completar e rodar mas não seipode me ajudar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DIGOW Postado Junho 24, 2005 Autor Denunciar Share Postado Junho 24, 2005 alguém pode me ajudar???é urgente Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
DIGOW
Pessoal estou precisando de ajuda
Meu professor passou um trabalho para completar o programa que ele deu, porque a turma é iniciante ainda, o trabalho é esse:
Multiplicação de matrizes
Escreva um programa que recebe como parâmetros um inteiro n, sendo n potência de 2,
e possívelmente '-S' para utilizar o método de multiplicação de matrizes de Strassen.
O seu programa deve gerar 2 matrizes aleatórias n x n e mutiplicá-las, e imprimir o tempo de execução gasto.
O programa do professor é esse:
------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void metodostrassen (int *mat1, int *mat2, int b0, int c0, int tam){
int a;
/*Partindo a matriz*/
if (tam>2){
a= tam>2;
metodostrassen (mat1, mat2, b0, c0, a);
metodostrassen (mat1, mat2, b0+a, c0, a);
metodostrassen (mat1, mat2, b0, c0+a, a);
metodostrassen (mat1, mat2, b0+a, c0+a, a);
}
else{
/*formulas*/
}
}
int testan (int n) {
int x,y,c;
c=n;
do{
x=c%2;
y=c/2;
c=y;
}
while(x!=1 && y>1);
if(x==0 && y==1)
{
return n;
}
else
{
n=0;
puts("Digite novamente:");
scanf("%d", &n);
testan (n);
}
}
int main (int argc, char* argv[])
{
int *mat1, *mat2, *mat3;
int i, j, k, s, z, n ;
time_t t1,t2;
mat1=(int*)malloc(n*sizeof(int));
mat2=(int*)malloc(n*sizeof(int));
mat3=(int*)malloc(n*sizeof(int));
t1=time(NULL);
s=0;
if(argc<2 || argc>3){
printf("Est errado: primeiro digita a ordem da matriz e depois se quiser pelo metodo de strassen digita -s");
return(1);}
else{
n=atoi(argv[1]);
n=testan(n);
/* printf("essa é a ordem da matriz:%d\n",n);*/
if(argc==3){
if(strcmp(argv[2], "-s")){
s=1;}}}
srand(time(NULL));
for(i=0; i<n; i++){
for(j=0; j<n; j++){
mat1[i*n+j]= rand()%100;
mat2[i*n+j]= rand()%100;
/* printf("%d ", mat1[i*n+j]);
printf("%d ", mat2[i*n+j]); */
}
/* printf("\n");*/
}
if(s==0){
for(i=0; i<n; i++){
for(j=0; j<n; j++){
z=0;
for(k=0; k<n; k++){
z+=mat1[i*n+k]*mat2[k*n+j];
}
mat3[i*n+j]=z;
}
}
/* printf("\n\n");
printf("matriz1*matriz2=\n");
for(i=0; i<n; i++){
for(j=0; j<n; j++){
printf("%d ", mat3[i*n+j]);
}
printf("\n");
}
printf("\n");*/
t2=time(NULL);
printf("tempo de execucao=%lf",difftime(t2,t1));
return(0);}
else{
metodostrassen (mat1, mat2, 0, 0, n);
}
}
------------------------------------------------------------------------------------------------
Agora só falta completar botando as formulas e oque mais faltar
alguém pode me da um help porque não sei como fazer
PS: Tenho que entregar o trabalho no sábado 25/06
Obrigado
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.