Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Arrays

Posted on 2000-05-04
8
Medium Priority
?
225 Views
Last Modified: 2010-04-02
For my C++ project, we are supposed to make a program that organizes a seating for the exam.  No two people taking the exam can sit near each other.  We are supposed to use arrays.  Could you please help me out as I am a beginner with C++.


Thanks
0
Comment
Question by:raheelahmadkhan
8 Comments
 
LVL 2

Expert Comment

by:abesoft
ID: 2778615
You need to figure out an algorithm to do the task.  One approach is to "do it on paper".  Then, write a program that uses a similar approach to the operations that you did to do the task manually.

If you can't figure it out how to do it manually, then no amount of expert help will tell you how to write the program.
0
 
LVL 1

Expert Comment

by:tvanceplus
ID: 2778706
The experts exchange policy is that we can not do a homework assignment for you. We can, however, help you with specific problems and setbacks that you encounter. This is so that all of us that belong to experts exchange can become better programmers.

Try and put something together. Figure out what data you get to start with and then what conclusions you need to come up with.

I have always found the best way to figure out an algorithm is to get some sample input, then do what I want the computer to do manually, recording what I do. This helps you organize and know exactly what your program is supposed to do.


Great Luck!!

tvanceplus
0
 
LVL 1

Expert Comment

by:issamwd
ID: 2780769
Ok, the solution would be so easy, but first tell me what do you want exactly?

as i understand the problem till this point is:
1) one testing room.
2) more than one test at the same time.
3) no two students having the same course to sit near each other.

first lets number the tables sequentially so you can use 1 dimentional arrays. (its easier)

the type of the array's elements is STRING data type. (each student would have a string that indicates his number and course ID)

if two tests to be held assign the odd numbered tables to those of test "A"
and the even to the others.

Many alternatives exists depending on your algorithm.

For more assistance please tell us what do you want exactly.


issamwd
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:raheelahmadkhan
ID: 2781815
Could someone give me an example with C++ on how to do it....Your response will be greatly appreciated.
0
 
LVL 49

Accepted Solution

by:
DanRollins earned 150 total points
ID: 2783589
This code uses a 2-d array to represent the seats of the testing room.  The function FindAvailableSeat(pY,pX) locates a seat that is unoccupied and has nobody in any neighboring seat and sets the caller's X,Y with the found location.  THe main() fn sets that location to a number (the student number).  

This checks not only for and empty seta to the left and right plus empty infront and in bac, it ensures that the seats in the four diagonals are also empty.  

When done, It prints a seating chart


#include <stdio.h>

#define CNUM_Rows 20
#define CNUM_Clms 10

#define CNUM_ArrayRows (CNUM_Rows+2)
#define CNUM_ArrayClms (CNUM_Clms+2)

#define CNUM_NumberOfTestTakers 20    // pepple to try to seat

int aSeats[CNUM_ArrayRows][CNUM_ArrayClms];


void InitSeatArray()
{
  for (int j=0; j< CNUM_Rows; j++ ) {
    for (int k=0; k< CNUM_Clms; k++ ) {
      aSeats[j][k]= 0; // nobody is sitting there
    }      
  }
}

bool FindAvailableSeat( int *pnRow, int* pnClm )
{
  // the outside of the matrix -- clm 0, clm 9, row 0, and row 20
  // are a buffer to avoid using an index < 0)
  // we later adjust by discarding these two rows and two clms

  for (int nRow=1; nRow< CNUM_Rows; nRow++ ) {
    for (int nClm=1; nClm< CNUM_Clms; nClm++ ) {
      if ( (aSeats[nRow+0][nClm+0] == 0 ) // the seat itself
        && (aSeats[nRow+1][nClm+0] == 0 ) // the seat behind
        && (aSeats[nRow-1][nClm+0] == 0 ) // the seat in front
        && (aSeats[nRow+0][nClm-1] == 0 ) // to the left
        && (aSeats[nRow+0][nClm+1] == 0 ) // to the right
        && (aSeats[nRow+1][nClm+1] == 0 ) // diag right/behind
        && (aSeats[nRow+1][nClm-1] == 0 ) // diag left/behind
        && (aSeats[nRow-1][nClm+1] == 0 ) // diag right/ahead
        && (aSeats[nRow-1][nClm-1] == 0 ) // diag left/ahead
        ) {
        *pnRow= nRow; *pnClm= nClm;
        return( true );
      }
    }      
  }
  // cycled through all seats and found no place to put
  // another testee
  return (false );
}

main()
{
  InitSeatArray();
  int nRow, nClm;
  for (int j=1; j<= CNUM_NumberOfTestTakers; j++ ) {
    bool fRet= FindAvailableSeat( &nRow, &nClm );
      if ( fRet == false ) {
            printf("Only able to seat %d test-takers in the "
                   "room with %d rows and %d clms of seats.\n",
               j-1, CNUM_Rows, CNUM_Clms
            );
            break;
      }
      else {
      aSeats[nRow][nClm]= j; // put a student in the seat      
      }
  }
  printf( "Seating Chart\n" );
  for ( nRow=1; nRow <CNUM_Rows; nRow++ ) {
    for (nClm=1; nClm <CNUM_Clms; nClm++ ) {
      printf(" %02.2d", aSeats[nRow][nClm] );
      }
    printf("\n");
  }
  return(0);
}
0
 

Author Comment

by:raheelahmadkhan
ID: 2813958
I fixed the program a little bit.  Right now, when we tell the program the number of tests, the program just arranges the tests so no two of them are near each other.  We  want to make the program in such a way that the program keeps on looping around when we input the number of tests and number of students, it loops until all of the tests are filled in.  If you have any more questions, please feel free to ask.  I hope you reply soon.



#include <iostream.h>
#include <math.h>
#include <fstream.h>
#include <string.h>
#include <stdio.h>

#define CNUM_Rows 30
#define CNUM_Clms 20

#define CNUM_ArrayRows (CNUM_Rows+2)
#define CNUM_ArrayClms (CNUM_Clms+2)

#define CNUM_NumberOfTests 10    

int aSeats[CNUM_ArrayRows][CNUM_ArrayClms];


void InitSeatArray()
{
  for (int j=0; j< CNUM_Rows; j++ ) {
    for (int k=0; k< CNUM_Clms; k++ ) {
      aSeats[j][k]= 0; // nobody is sitting there
    }
  }
}

bool FindAvailableSeat( int *pnRow, int* pnClm )
{
 

  for (int nRow=1; nRow< CNUM_Rows; nRow++ ) {
    for (int nClm=1; nClm< CNUM_Clms; nClm++ ) {
      if ( (aSeats[nRow+0][nClm+0] == 0 ) // the seat itself
        && (aSeats[nRow+1][nClm+0] == 0 ) // the seat behind
        && (aSeats[nRow-1][nClm+0] == 0 ) // the seat in front
        && (aSeats[nRow+0][nClm-1] == 0 ) // to the left
        && (aSeats[nRow+0][nClm+1] == 0 ) // to the right
        && (aSeats[nRow+1][nClm+1] == 0 ) // diag right/behind
        && (aSeats[nRow+1][nClm-1] == 0 ) // diag left/behind
        && (aSeats[nRow-1][nClm+1] == 0 ) // diag right/ahead
        && (aSeats[nRow-1][nClm-1] == 0 ) // diag left/ahead
        ) {
        *pnRow= nRow; *pnClm= nClm;
        return( true );
      }
    }
  }
 
  return (false );
}

main()
{
  InitSeatArray();
  int fRet;
  int nRow, nClm;
  while (fRet!= false)
  {
      for (int j=1; j<= CNUM_NumberOfTests; j++ ) {
            bool fRet= FindAvailableSeat( &nRow, &nClm );
if ( fRet == false ) {
printf("Only able to seat %d test-takers in the " 
       "room with %d rows and %d clms of seats.\n",
               j-1, CNUM_Rows, CNUM_Clms
);
break;
}
else {
      aSeats[nRow][nClm]= j; // put a student in the seat
}
  }
  printf( "Seating Chart\n" );
  for ( nRow=1; nRow <CNUM_Rows; nRow++ ) {
    for (nClm=1; nClm <CNUM_Clms; nClm++ ) {
      printf(" %02.2d", aSeats[nRow][nClm] );
}
    printf("\n");
  }
  }
  return(0);
}
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 2816041
Yes, raheelahmadkhan, I have two  questions:

Does the solution that I provided answer your question?  Is there some flaw in the program that keeps you from awarding me the points you offered?

I hope you reply soon.

-- dan

0
 

Author Comment

by:raheelahmadkhan
ID: 2817593
Youre program was excellent but there is more to it...You have to input the number of tests and the number of students taking each test...then you arrange the seating so that no two people sit next to each other...i'll reward you as soon as you can do this
thanks
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

876 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question