C/C++ Problem in c++ in writing an algorithm

AI Thread Summary
The discussion revolves around troubleshooting an algorithm designed to process hotel visitor information from a file. The user is attempting to read visitor data, including names, arrival and departure dates, and room numbers, and then aggregate the total number of days spent in each room. The initial implementation only correctly processes the first room's data, failing to aggregate the days for subsequent rooms.Key issues identified include the algorithm's logic for checking existing room numbers and updating the total days. The user received assistance in debugging the code, which involved renaming variables for clarity and refining the logic to ensure that room numbers are correctly matched and aggregated. The revised code successfully compiles and produces the desired output, indicating that the problem has been resolved. The user expresses gratitude for the help and notes their ongoing learning process in programming.
SimonasV
Messages
6
Reaction score
0
Hello,
please help me to find the problem in algorithm. My task is to read from file hotel visitor's info (name/surname, date of arrival, date of departure, room number). Than, to contract similar room numbers and write near the overall number of days in particular room. So everything is good except my algorithm which should contract and write down the overall number of days. Instead of this, it writes and counts correctly just first rooms data... (I have attached the input file) and my code bellow: (and sorry for perhaps inaccurate language)...

Code:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#define MAX 30
using namespace std;

int main(int argc, char *argv[])
{//description of structures----------------------------------------------------------------      
           
    struct viesbutis {
           char id[MAX];
           int ma, da; //arrive
           int mi, di; //leave
           int nr; //room number
           int paru; //days in hotel
}A[MAX]; int n;      
    
    struct lygina {
           int nr1;
           int paru1;
           }B[MAX];  

 //data input----------------------------------------------------------
    ifstream fd ("in.txt");
    if(!fd) {
             cout<<"Error with \"in.txt\" file."<<endl;
             system("PAUSE");
             return 0;
    }
    else cout<<"Data loaded to \"out.txt\""<<endl;
    n=0;
    while(!fd.eof() ) {
                    fd.get(A[n].id, sizeof A[n].id);
                    fd>>A[n].ma>>A[n].da>>A[n].mi>>A[n].di>>A[n].nr;
                    fd.ignore();
                    A[n].paru=((A[n].mi)-(A[n].ma))*30+((A[n].di)-(A[n].da));
                    n++;
                    }
                    fd.close();

 //data output------------------------------------------------------------

   ofstream fr("out.txt", ios::app);
   
   fr<<"-------------------------------------------------------------------"<<endl;
   fr<<" Hotel \"Smart house\" visitors information (2008)   "<<endl;
   fr<<"-------------------------------------------------------------------"<<endl;
   fr<<"room nr.  days "<<endl;
   fr<<"-------------------------------------------------------------------"<<endl;
   fr.setf(ios::fixed);
   
   //Algorithm-------------------------
   
   int k=0;  
   int size = 0; 
   int i;
   B[0].nr1=0;
   for(int m=0;m<n;m++) 
      { k = 0;
      for ( i=0;i<size;i++) 
          { 
               if(A[m].nr==B[i].nr1 )
                  B[i].paru1 += A[m].paru; 
                  k++; }
       if(k==0)
               {     
               B[size].nr1=A[m].nr;
               B[size].paru1=A[m].paru;
               size++;
               }
               cout<<"galas"<<" k "<<k<<" m "<<m<<" i "<<i<<" size "<<size<<endl;
}

   for(i=0;i<size;i++){
   fr<<setw(8)<< B[i].nr1 <<setw(8) << B[i].paru1 <<setw(8)<<endl;}
   fr<<"-------------------------------------------------------------------"<<endl;
   fr.close();
                    
system("PAUSE");
return EXIT_SUCCESS;
}
 

Attachments

Last edited:
Technology news on Phys.org
where is "in.txt" ?
 
zyh said:
where is "in.txt" ?

It's inserted as attachment :-)
 
This works fine for me, since you code is VERY HARD to read. I change the variable names. And it take me 30 minutes to find your bug through debugging in the code:cry:.
Code:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#define MAX 30
using namespace std;

int main(int argc, char *argv[])
{//description of structures----------------------------------------------------------------      
           
    struct CPerson {
           char name[MAX];
           int monthArrive, dayArrive;	//arrive
           int monthLeave, dayLeave;	//leave
           int roomNumber;		//room number
           int days;	//days in hotel
	}A[MAX]; int numberPerson;      
    
    struct CRecord {
           int roomNumber;
           int days;
	}B[MAX]; 
	

	
	//data input----------------------------------------------------------
    ifstream fd ("in.txt");
    if(!fd) {
		cout<<"Error with \"in.txt\" file."<<endl;
		system("PAUSE");
		return 0;
    }
    else cout<<"Data loaded to \"out.txt\""<<endl;
    numberPerson=0;
    while(!fd.eof() ) {
		fd.get(A[numberPerson].name, sizeof A[numberPerson].name);
		fd>>A[numberPerson].monthArrive>>A[numberPerson].dayArrive>>A[numberPerson].monthLeave>>A[numberPerson].dayLeave>>A[numberPerson].roomNumber;
		fd.ignore();
		A[numberPerson].days=((A[numberPerson].monthLeave)-(A[numberPerson].monthArrive))*30+((A[numberPerson].dayLeave)-(A[numberPerson].dayArrive));
		numberPerson++;
	}
	fd.close();
	
	//data output------------------------------------------------------------
	
	ofstream fr("out.txt", ios::app);
	
	fr<<"-------------------------------------------------------------------"<<endl;
	fr<<" Hotel \"Smart house\" visitors information (2008)   "<<endl;
	fr<<"-------------------------------------------------------------------"<<endl;
	fr<<"room roomNumber.  days "<<endl;
	fr<<"-------------------------------------------------------------------"<<endl;
	fr.setf(ios::fixed);
	
	//Algorithm-------------------------
	
	int matchNumbers=0;  
	int recordSize = 0; 
	int i;
	B[0].roomNumber=0;

	for(int m=0;m<numberPerson;m++) { 
		matchNumbers = 0;

		//check the current room number has been recorded.
		for ( i=0;i<recordSize;i++) { 
			if(A[m].roomNumber==B[i].roomNumber ){
				B[i].days += A[m].days; 
				matchNumbers++;
				break;//You just break the loop, because there is no match anymore.
			}
				
		}


		//If there is no record, add a new record.
		if(matchNumbers==0){     
			B[recordSize].roomNumber=A[m].roomNumber;
			B[recordSize].days=A[m].days;
			recordSize++;
		}
		
		cout<<"galas"<<" matchNumbers "<<matchNumbers<<" m "<<m<<" i "<<i<<" recordSize "<<recordSize<<endl;
	}
	
	for(i=0;i<recordSize;i++){
		fr<<setw(8)<< B[i].roomNumber <<setw(8) << B[i].days <<setw(8)<<endl;
	}
	fr<<"-------------------------------------------------------------------"<<endl;
	fr.close();
	
	system("PAUSE");
	return EXIT_SUCCESS;
}
 
Thank you very much. It's working! It was difficult to read because I'm new and i use Lithuanian language to identify my variables cause I'm Lithuanian :-) By the way, it's not the end of this program but I hope to understand it by miself... :-) Thank you once again!
 
Last edited:
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Back
Top