473,729 Members | 2,150 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Classes Matrix question

87 New Member
Hello everyone. I'm writing a program which uses a class called matrix. I have written all of the different functions, constructor, etc.

When I run the program I receive "Constructo r", which I placed in the constructor, and then the program crashes. I have no clue where my problem is.

The matrix is for size 2x2 up to 10x10, and it must be square.

Below is the code:

Expand|Select|Wrap|Line Numbers
  1. #include <iostream>
  2. #include <ctype.h>
  3. using namespace std;
  4. int innerprod(int s[][10],int t[][10],int r,int c,int size)
  5. {
  6.     int temp=0,i;
  7.     for (i=0;i<=size;++i)
  8.     {
  9.         temp=temp+s[r][i]*t[i][c];
  10.     }
  11.     return temp;
  12. }
  13. class Matrix
  14. {
  15. public:
  16.     ~Matrix(){};
  17.     Matrix();
  18.     void readm();
  19.     void addm(Matrix);
  20.     void multm(Matrix);
  21.     void print();
  22. private:
  23.     int a[10][10];
  24.     int size;
  25. };
  26. Matrix::Matrix()
  27. {
  28.     cout<<"Constructor"<<endl;
  29.     int i=0, j=0;
  30.     for (i=0;i<=10;++i)
  31.         for (j=0;j<=10;++i)
  32.         {
  33.             a[i][j]=0;
  34.         }
  35. }
  36. void Matrix::readm()
  37. {
  38.     int i=0,j=0;
  39.     for (i=0;i<=10;++i)
  40.         for (j=0;j<=10;++j)
  41.         {
  42.             cin>>a[i][j];
  43.         }
  44. }
  45. void Matrix::addm(Matrix B)
  46. {
  47.     int i=0,j=0;
  48.     for (i=0;i<=10;++i)
  49.         for (j=0;j<=10;++j)
  50.         {
  51.             a[i][j]=a[i][j]+B.a[i][j];
  52.         }
  53. }
  54. void Matrix::multm(Matrix B)
  55. {
  56.     int i=0,j=0,temp[10][10],n=2;
  57.     for(i=0;i<=10;++i)
  58.         for (j=0;j<=10;++j)
  59.         {
  60.             temp[i][j]=innerprod(a,B.a,i,j,n);
  61.         }
  62.     for (i=0;i<=10;++i)
  63.         for (j=0;j<=10;++j)
  64.         {
  65.             a[i][j]=temp[i][j];
  66.         }
  67. }
  68. void Matrix::print()
  69. {
  70.     int i=0,j=0;
  71.     for (i=0;i<=10;++i)
  72.     {
  73.         cout<<endl<<endl;
  74.         for (j=0;j<=10;++j)
  75.         {
  76.             cout<<"    "<<a[i][j];
  77.         }
  78.     }
  79.     cout<<endl;
  80. }
  81. void main()
  82. {
  83.     char choice;
  84.     Matrix x,y;
  85.     cout<<"   Welcome to Matrix Manipulations."<<endl;
  86.     x.print();
  87.     cout<<"   You may add or multiply a matrix."<<endl;
  88.     cout<<"   Enter choice: (a)dd or (m)multiply.  "<<endl;
  89.     cin>>choice;
  90.     choice>>tolower(choice);
  91.     cout<<"   Enter a square matrix from 2x2 to 10x10 in row order:"<<endl;
  92.     x.readm();
  93.     switch(choice)
  94.     {
  95.     case 'a':cout<<"Enter a square matrix from size 2x2 to 10x10 in row order:"<<endl;
  96.         y.readm();
  97.         x.print();
  98.         cout<<endl<<"    +";
  99.         y.print();
  100.         cout<<endl<<"    =";
  101.         x.addm(y);
  102.         x.print();
  103.         break;
  104.     case 'm':cout<<"Enter a square matrix from size 2xe to 10x10 in row order:"<<endl;
  105.         y.readm();
  106.         x.print();
  107.         x.multm(y);
  108.         cout<<endl<<"    *";
  109.         y.print();
  110.         cout<<endl<<"    =";
  111.         x.print();
  112.         break;
  113.     default: cout<<"    INVALID CHOICE!";
  114.         break;
  115.     };
  116. }
  117.  
  118.  
Thanks,

J
Jun 19 '07 #1
18 2471
JosAH
11,448 Recognized Expert MVP
Your loops all have an off by one error. When the maximum dimension of an array
equals 10, valid index values are 0, 1, 2, 3, 4, 5, 6 , 7, 8, and 9 (count them:
there are 10 different index values). Therefore your loops should all have a
terminating condition such as:

Expand|Select|Wrap|Line Numbers
  1. for (int i= 0; i < 10; i++) ...
  2.  
kind regards,

Jos
Jun 19 '07 #2
Hypnotik
87 New Member
Back to my rescue again hun JosAH?

I understand what you're saying, and that is right...I wasn't thinking when I made them less than or equal to 10. The program still crashes, so the functions aren't going out of scope (or whatever it's called).

J
Jun 19 '07 #3
JosAH
11,448 Recognized Expert MVP
Back to my rescue again hun JosAH?

I understand what you're saying, and that is right...I wasn't thinking when I made them less than or equal to 10. The program still crashes, so the functions aren't going out of scope (or whatever it's called).

J
I took a bit closer look at your code: have a look at the inner loop in your ctor:
it increments 'i' instead of 'j' and it will shoot you in your foot for it ;-)

kind regards,

Jos
Jun 19 '07 #4
Hypnotik
87 New Member
Awesome. I never used 'i' and 'j' before because they look so much alike! But seems that my instructor uses them so I've started.

I also removed the destructor function...whic h stopped the program from crashing. Do you know why that would be?

J
Jun 19 '07 #5
Hypnotik
87 New Member
I know need to set the size of my matrix to the input from the user from the default size of the matrix (the constructor). Do I need to create an entirely differnent function for this?

something like:

void SetMatrix() ?
Jun 19 '07 #6
Hypnotik
87 New Member
I know need to set the size of my matrix to the input from the user from the default size of the matrix (the constructor). Do I need to create an entirely differnent function for this?

something like:

void SetMatrix() ?

Is passing the size of the array to the functions just like passing any other info to a function?

Thanks,
J
Jun 20 '07 #7
Hypnotik
87 New Member
Well I have found my problem, however there is a problem with my multiplication.

J
Jun 20 '07 #8
JosAH
11,448 Recognized Expert MVP
Well I have found my problem, however there is a problem with my multiplication.

J
What's the problem then? And please don't say "it produces the wrong results" ;-)

kind regards,

Jos
Jun 20 '07 #9
Hypnotik
87 New Member
Hah. Well it does give the wrong answer. Anyway, I think the problem is in the innerprod function. When I do addition the program works great. When I do the multiplication it returns a HUGE number for a matrix with all 1's as the input. I pass all types of information to the innnerprod function including both matrices and size. The size is correct, however the numbers within the matrix are incorrect.

I'm going to check my code and make sure the one posted in the thread is up to date.


Thanks,
J
Jun 20 '07 #10

Sign in to post your reply or Sign up for a free account.

Similar topics

6
3330
by: Ben Ingram | last post by:
Hi all, I am writing a template matrix class in which the template parameters are the number of rows and number of columns. There are a number of reasons why this is an appropriate tradeoff for my particular application. One of the advantages is that the _compiler_ can force inner matrix dimensions used in multiplication to agree. A _complie-time_ error will be triggered if you write A * B and the number of coluns in A does not equal the...
45
3608
by: Steven T. Hatton | last post by:
This is a purely *hypothetical* question. That means, it's /pretend/, CP. ;-) If you were forced at gunpoint to put all your code in classes, rather than in namespace scope (obviously classes themselves are an exception to this), and 'bootstrap' your program by instantiating a single application object in main(), would that place any limitations on what you could accomplish with your program? Are there any benefits to doing things that...
5
2446
by: Srini nandiraju | last post by:
Hi folks, I am trying to implement a friend class and the following is what I did. Please scroll down. /***************** CODE **********************************/ class BKP { private: int nVar;
5
2772
by: Steven T. Hatton | last post by:
This is a question about coding styles. I've seen some cases where the programmer has redeclared the pure virtual functions from an interface class in the implementation derived from it. For example, I have this abstract base class: namespace widgets { template<Var_T=float> class VFunctor_IF { public: virtual void operator()(const std::vector<Var_T>& vars_ptr) = 0;
4
366
by: Desperate | last post by:
I want to create class Matrix which contains array of class Rows and some additions Class Rows contains array of Cells Here is the declaration public class Cell public int value = 0 public int color = 0 public int background = 0
10
8714
by: Duncan M Gunn | last post by:
Hi, I need to store the following matrix of values: T U V A 2 1 1 B 2 - - C - - 2 Where (-) is an empty cell.
7
4690
by: toton | last post by:
Hi, I have a STL vector of of characters and the character class has a Boost array of points. The things are vector<Characterchars; and class Character{ private: array<Point,Npoints; }; Now are the memory layout is contiguous? i.e all the character resides side by side just like array, and all Points side by side insede the
9
1407
by: MathStuf | last post by:
I am working on a class that will be a matrix based on a vector of vectors. I am having trouble with the following code causing errors on compilation: template<class Tclass MatrixBase { public: MatrixBase() { width = 0;
1
3107
by: almurph | last post by:
Hi everyone, Concerning the Needleman-Wunsch algorithm (cf. http://en.wikipedia.org/wiki/Needleman-Wunsch_algorithm) I have noticed a possible loop. Inside the algorithm there is an important decision making mechanism. Its a "if, else if, else if" structure like:
0
8913
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
8761
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
9280
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
9200
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9142
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
6016
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
4525
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
4795
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
3
2162
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.