Автор Тема: Задача на C  (Прочетена 2400 пъти)

theenemy

  • Участници
  • ***
  • Публикации: 9
    • Профил
Задача на C
« -: May 03, 2010, 19:28 »
Напишете програма, която умножава две матрици. Съставете два варианта: един с използване на масиви и втори с използване на указатели. Използвайте стандартните функции за време, за да определите кой вариант работи по-бързо.
 Трябва ми за сряда. Плс хелп.
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Задача на C
« Отговор #1 -: May 03, 2010, 19:51 »
Примерно:
main()
{
nov masiv[n,t] = pyrvi masiv[n,m] * vtori masiv[m,t];

zasechi mi vreme();

return 0;
}

Втори пример с указатели:
main()
{
ukazatel kym nov masiv = ukazatel kym pyrvi masiv * ukazatel kym vtori masiv;

zasechi mi vreme();

return 0;
}

И ти остава само да сравниш двете времена, но мисля, че за това и сам ще се справиш :) Успех в сряда!
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

theenemy

  • Участници
  • ***
  • Публикации: 9
    • Профил
Re: Задача на C
« Отговор #2 -: May 03, 2010, 20:09 »
Аз имам една програм с масиви, но нямам идея другата как ще стане. Ето я и нея:

   #include<iostream>

using namespace std; 

int main(){

   const int N=10;//тука си избираш колко да е N

   float A[N][N], B[N][N], C[N][N]; //декларация на трите двумерни масива А, B и С

   float max=0;

   int i, j, k;

   cout<<"Vyvedete masiv A: \n";

   for(j=0; j<N;j++){ //Въвеждане на масив А

      cout<<"  "<<j+1<<" red: \n";

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

         cout<<i+1<<"-i element: ";cin>>A[j];

      }

   }

   cout<<"Vyvedete masiv B: \n";

   for(j=0; j<N;j++){ //Въвеждане на масив B

      cout<<"  "<<j+1<<" red: \n";

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

         cout<<i+1<<"-i element: ";cin>>B[j];

      }

   }

   for(j=0; j<N;j++) //при всяка итерация се изчислява ред на двумерния масив С

      for(i=0; i<N;i++){ //при всяка итерация се изчислява елемент от ред двумерния масив С

         C[j]=0;

         for(k=0;k<N;k++)//при всяка итерация се прибавя резултат от умножението на елементите на А и Б към стоността на поредния елемент на С

            C[j]+=A[j][k]*B[k];

         if(max<C[j])max=C[j];

      }

      cout<<"  Masiva C: \n";

         for(j=0; j<N;j++){ //цикъл за извеждане

            for(i=0; i<N;i++)cout<<C[j]<<' ';cout<<endl;

         }

         cout<<"Maksimalni element na masiva C e: "<<max<<endl;

   return 0;

}
Активен

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: Задача на C
« Отговор #3 -: May 03, 2010, 20:35 »
Аз имам една програм с масиви, но нямам идея другата как ще стане. Ето я и нея:

Първо това е на C++, уточни за кой от двата езика става въпрос.
Второ, кое не ти е ясно - как се умножават две матрици, как се ползват масиви или как се ползват указатели?
« Последна редакция: May 03, 2010, 20:55 от bop_bop_mara »
Активен

theenemy

  • Участници
  • ***
  • Публикации: 9
    • Профил
Re: Задача на C
« Отговор #4 -: May 03, 2010, 20:52 »
Честно казано не съм много на ясно нито с масивите, нито с указателите :(
Активен

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: Задача на C
« Отговор #5 -: May 03, 2010, 20:56 »
ОК, а искаш да се научиш или искаш просто програма :)
Активен

theenemy

  • Участници
  • ***
  • Публикации: 9
    • Профил
Re: Задача на C
« Отговор #6 -: May 03, 2010, 21:02 »
Първо да се науча, а след това да мога сам да си правя програмите, но като се има предвид че досега не съм се занимавал със програмиране, не ми е особено лесно :(
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Re: Задача на C
« Отговор #7 -: May 03, 2010, 21:34 »
По мой изчисления от поне 3 месеца ти го преподават, а че ти през тях не си се занимавал, не ми се струва нормално... но то вече кой ли не не приемат в университетите само и само да съберат хора ...

След около 5 секунди търсене в Google: http://www.google.bg/search?aq=1&oq=martix+multiplication&sourceid=chrome&client=ubuntu&channel=cs&ie=UTF-8&q=matrix+multiplication+in+c
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Задача на C
« Отговор #8 -: May 03, 2010, 22:53 »
Коя работи по-бързо в крайна сметка?
Активен

"Knowledge is power" - France is Bacon

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Задача на C
« Отговор #9 -: May 03, 2010, 23:05 »
Няма ли да е тази с указателите.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Задача на C
« Отговор #10 -: May 03, 2010, 23:37 »
Защо трябва да е решението с указателите?
Активен

"Knowledge is power" - France is Bacon

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Задача на C
« Отговор #11 -: May 03, 2010, 23:39 »
Може би заради броя на операциите... (просто предположение).
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Задача на C
« Отговор #12 -: May 03, 2010, 23:46 »
Броят на операциите трябва да е същият, очевидно някъде другаде има уловка.
Активен

"Knowledge is power" - France is Bacon

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Задача на C
« Отговор #13 -: May 03, 2010, 23:53 »
Ами предполагам, трябва да мислите ми да се насочат към това - какво е указател? - променливи, които съдържат стойност от паметта. Указателя към масив ще сочи първия елемент на този масив. Аре стига ме мъчи де :).
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Задача на C
« Отговор #14 -: May 03, 2010, 23:57 »
Добре де, тая памет трябва да се dereference-ва, иначе как ще умножаваш и събираш там съдържанието на стойностите, намиращи се на тоя адрес. Нямам никаква идея кое ще е по-бързо, и на мен ми е интересно.

При варианта с указатели, нямаме указатели към масиви а към int или каквито там стойности, идеята е да се прави с pointer аритметика. Демек където ще кажеш a[2][2] примерно ще е *(b+2*length+3).

Някой дето разбира повече да се изкаже, аз нямам идея :)

Грр спи ми се и пиша глупости :)
« Последна редакция: May 04, 2010, 00:04 от gat3way »
Активен

"Knowledge is power" - France is Bacon