C++ Help Needed

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
i guess i am allowed to use anything , but it will be rather obvious to my lecturer if he sees some bombastic codings lol

In that case, then the approach you have taken using nest if else statements is too laborious.
Given that each player can choose among 3 choices, 2 of them means a total of 9 different choices. Instead of having such lengthy coded if..else statements, consider using a 2D array below to list out all possible outcome and then
Code:
// Horizontal PLAYER 1 (left -> right) = Scissors, Paper, Stone
// Vertical PLAYER 2 (top -> down) = Scissors, Paper, Stone
// Cell [1][2] -> PLAYER 1 choose (2 = Stone), PLAYER 2 choose (1=Paper)
const int outcome[3][3] = { {  0, -1,  1 },
                            {  1,  0, -1 },
                            { -1,  1,  0 } };

In this way, all you need is collect the 2 player's choice, map against the table, immediately u know the outcome. Positive means PLAYER 1 wins, Negative means PLAYER 2 wins and ZERO for DRAW.

If you are using pointers, you don't even need a if..else statements, you can immediately print out your outcome in the string format you need, using a 1D string array as such
Code:
const char const *[3] = { "This is no winner", "Player 1 is the winner", "Player 2 is the winner" };

In this way, you wouldn't be using integers for your outcome, but rather the index of the outcome message you want to print.

Is this the only way ? Obviously not :) Just that this is one of the most visually appealing approach that doesn't need to think too much, just proper layout.

Update:

Just more information for you to absorb. This is taught in computer architecture courses that describe on how processor works on basic level.

This approach normally is faster than branching. Reason is modern processors comes with branch predictor of various depth. Basically processors make so-called intelligent speculation of between 2 possible execution paths, which is likely to be executed, normally also with hint from compilers. For eg. repeating a loop is more likely than jumping out of the loop. The advantage of doing so, is such that prefetching of instruction and data can happen in parallel stages.

The processor functions like an assembly factory. If you want to put together a TV, it happens in stages. Stage one, put together the electronic boards, stage 2, attach CRT to electronic boards, stage 3 attach the base casing, stage 4 attach the top casing. This is just a very simplistic view of a assembly factory. Likewise for computers, a simple statement of i = i + 1 can be split into numerous steps. Stage 1 load instructions, stage 2 load i, stage 3, load constant 1, stage 4, push i and i into ALU which will output to a register AX, stage 5 fetch address of i into register BP, stage 6, assign AX to [BP]

Branch predictor predict a particular flow and then attempt to prefill the instruction pipeline with instructions that may follow a particular chosen path. Intel processors can have more than 20 in depth. Question is what happened if the branch predicted is wrong during actual runtime ? That means instruction fetched for under the IF block is wrong and have to be replaced with the ELSE block. This is a branch miss and require flushing of the instruction pipeline and then fetch all instructions under ELSE block into the pipeline. Such behaviour is detrimental to the performance of the system.

Thus when writing code, if you have the means to design without too much decision making, but rather using straight forward computation to decide where you want to choose what you want to do, it's normally better in performance.
But there again, let me guess, seldom people go into such aspect, that's quite true because normally architectural or algorithmic performance tuning normally yields much better performance gain. That being said, such low level optimisation still has it value when you are coding microcontrollers, or certain aspect of programming that require as much speed as you need from the hardware such as video encoding, large data crunching, simulation engineering, 3D programming etc. The value from understanding such stuffs is a much better foundation in development. It will help to scope your line of thoughts.​

Happy developing ...
 
Last edited:

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
Alright guys, here is the next question.

Write a program, using a for loop, to generate 10 random numbers between 15 and 150, inclusive. Then, the program should print how many of those numbers fall into the following categories: (1) between 15 and 50, inclusive; (2) between 51 and 100, inclusive, and (3) between 101 and 150, inclusive. Assume there is no user input for this program.

And here is my code , i need help because idk how to generate the 10 random numbers, i would appreciate if u guys guide me along to get the correct codes rather than posting your own version of codes which i do not understand usually haha
#include <iostream>
#include <string>
#include <sstream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main()
{
int numberchanging;

for(numberchanging=15 ; numberchanging>=15 , numberchanging<=150 ; numberchanging ++)
{
if(numberchanging>=15,numberchanging<=50)
{
cout<<"Category 1 numbers are: " <<numberchanging<<endl;
}
else if(numberchanging>=51,numberchanging<=100)
{
cout<<"Category 2 numbers are: "<<numberchanging<<endl;
}
else if(numberchanging>=101,numberchanging<=150)
{
cout<<"Category 3 numbers are: "<<numberchanging<<endl;
}

}


return 0;
}

Please go read up rand - C++ Reference

Then look at your for..loop, should you be running 10 times or what ? Next look at the formal syntax of for..loop, what is your conditional expression exactly testing for. Your for..loop will compile, but what is your conditional expression actually testing ?

Your question only ask for number of times it fall into a range, not ask you to print out every number, isn't it ?

For future posting, please use the CODE markup in this forum to encapsulate your code for easier reading.
 

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
hmmm thanks , i will look into it , i totally have no clue on doing this because our lecturer have not taught us yet , this assignment only starts 2 weeks from now but im doing it by my little knowledge of C++ , so please bear with me :(

While it is good to start early on things, but spend more time enhancing what you have done too. Meaning is for assignments and tutorials you have did, can they be done better and faster with new knowledge you have acquired during the lesson.

Getting ahead of the lecturers are normally for people that have some idea in what they are doing. It will be helpful if you read up separately on a C++ book too. Using knowledge taught in the lecture and get more information from other books, or maybe read ahead of the books.

Doing assignment is application of your knowledge, not working blindly which serve less purpose without adequate knowledge.

Read about what makes up a C++ program. Why are those #include statements required ? What are each of them for ? What is namespace and so forth. Do spend more time reading on them first. Follow through assignments as they come. This way things will start to get easier and also your knowledge will grow faster.
 
Last edited:

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
well thats a great advice man, seems like i have a wrong approach in studying for tertiary education, i do read C++ for dummies though , does that help?

There is no right approach or wrong approach when coming to education. Important is you get the information you need to get your job done. Some people works differently and learn differently from others. For me, I like to be ahead of time with knowledge, exercising these knowledge by doing simple proof of concept and be engaged in some challenges at times, but important is if you find road blocks, solve them. When you are reading new information and performing new tasks, slow down and look besides just getting your job done. Read up things beside what you need to know, this is breadth coverage that serve you more and make you more versatile. Across different faculties, just because you are a cook, doesn't mean you can't pick up a business trait.

It's good you are rather passionate in programming, just make sure you don't get too narrowly focus in just what is set for you to achieve. C++ is just a tool, what is more important for a developer is vast knowledge of technologies. It's your skill sets that matters more than knowing more languages :)

Enjoy software development
 

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
Here is the solution you might interested. Easy and simple.

Code:
#include <Windows.h>
#include <iostream>

int main()
{
	int number[10];
	int output;

	std::cout << "Generating 10 random numbers between 15 and 150." << std::endl;
	
	for(int i = 1; i <= 10; ++i)
	{
		output = rand() % 135 + 15;
		std::cout << i << ". " << output << std::endl;
		number[i] = output;
	}
		
	std::cout << "Check if the output falls within which region." << std::endl;

	for(int i = 0; i < sizeof(number); ++i)
	{
		if(number[i] >= 15 && number[i] <= 50)
		{
			std::cout << "Number [" << number[i] << "] is between 15 and 50" << std::endl;
			continue;
		}

		if(number[i] >= 51 && number[i] <= 100)
		{
			std::cout << "Number [" << number[i] << "] is between 51 and 100" << std::endl;
			continue;
		}

		if(number[i] >= 101 && number[i] <= 150)
		{
			std::cout << "Number [" << number[i] << "] is between 101 and 150" << std::endl;
			continue;
		}
	}
	
	std::cin.get();
	return 0;
}

3 questions for you
  1. Can you define the range of the random number generated based on the code you presented ? Will it satisfy the question requirement ?
  2. Why are you not using if..else block and short cut using continue instead ?
  3. Regarding "number >= 51 && number <= 100" is the test of ">=51" necessary ?
 

walkwaffle

Member
Joined
Feb 22, 2011
Messages
104
Reaction score
0
3 questions for you
  1. Can you define the range of the random number generated based on the code you presented ? Will it satisfy the question requirement ?
  2. Why are you not using if..else block and short cut using continue instead ?
  3. Regarding "number >= 51 && number <= 100" is the test of ">=51" necessary ?


It also calculates out 40 numbers, the list of 10 displayed numbers is from the 2nd to the 11th number
 

Nerrazzuri

Junior Member
Joined
Oct 15, 2012
Messages
9
Reaction score
0
3 questions for you
  1. Can you define the range of the random number generated based on the code you presented ? Will it satisfy the question requirement ?
  2. Why are you not using if..else block and short cut using continue instead ?
  3. Regarding "number >= 51 && number <= 100" is the test of ">=51" necessary ?


1. Yes, it will generate between 15 and 150.
2. Personal preference, I still prefer using continue rather than if..else.
3. It just depend on you to write the program, especially school projects, they are require to understand the concept instead of cutting short, since small program like this doesn't have impact on the performance.
4. Yes, I've made a mistake here, it' generates the 2nd number from number to 11th number.
 

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
1. Yes, it will generate between 15 and 150.

My question for you is "Will it satisfy the requirement of the question?" I shall quote the question below for your convenience

Write a program, using a for loop, to generate 10 random numbers between 15 and 150, inclusive. Then, the program should print how many of those numbers fall into the following categories: (1) between 15 and 50, inclusive; (2) between 51 and 100, inclusive, and (3) between 101 and 150, inclusive. Assume there is no user input for this program.

2. Personal preference, I still prefer using continue rather than if..else.

Surely you have your preferences, and it goes that same for using goto and labels in C/C++ programs. However, you ought to be aware of your intended audience, whom is a newbie to development. As such, both academic and industrial reasons, there is already a else..if block control structure available in C/C++ that exactly exhibit the required control flow in the program. It should be used instead of using continue in such inappropriate manner.

3. It just depend on you to write the program, especially school projects, they are require to understand the concept instead of cutting short, since small program like this doesn't have impact on the performance.

I do not agree with such argument. Regardless if it's for academic reason or otherwise, performance is always part and parcel of any development exercise. While you are correct that academic reason should have more focus in concepts than performance, however where performance can be easily obtain with ease of effort like for this case, it should be exercise. Moreover the reason for why I say if these tests are unnecessary is not for performance reason. It is basically the logical reasoning that I'm discussing. If the above block already cover the possibility of less than X, then based on logical reasoning, there is no need to assume it has to be more than or equal to X since it must be so.

Therefore this question that I asked has nothing to do with performance per say. It has to do with the necessity to validate unnecessarily when it is already accounted for.

4. Yes, I've made a mistake here, it' generates the 2nd number from number to 11th number.


This one is pointed out by others, however my further question for you is

What does sizeof(number) evaluate to ? Have you ever run this set of code that you have shared ?

Are you sure number[10] exist ? What is wrong with using number[10] ? Would you be able to share ?
 
Last edited:

Nerrazzuri

Junior Member
Joined
Oct 15, 2012
Messages
9
Reaction score
0
My question for you is "Will it satisfy the requirement of the question?" I shall quote the question below for your convenience





Surely you have your preferences, and it goes that same for using goto and labels in C/C++ programs. However, you ought to be aware of your intended audience, whom is a newbie to development. As such, both academic and industrial reasons, there is already a else..if block control structure available in C/C++ that exactly exhibit the required control flow in the program. It should be used instead of using continue in such inappropriate manner.



I do not agree with such argument. Regardless if it's for academic reason or otherwise, performance is always part and parcel of any development exercise. While you are correct that academic reason should have more focus in concepts than performance, however where performance can be easily obtain with ease of effort like for this case, it should be exercise. Moreover the reason for why I say if these tests are unnecessary is not for performance reason. It is basically the logical reasoning that I'm discussing. If the above block already cover the possibility of less than X, then based on logical reasoning, there is no need to assume it has to be more than or equal to X since it must be so.

Therefore this question that I asked has nothing to do with performance per say. It has to do with the necessity to validate unnecessarily when it is already accounted for.



This one is pointed out by others, however my further question for you is

What does sizeof(number) evaluate to ? Have you ever run this set of code that you have shared ?

Are you sure number[10] exist ? What is wrong with using number[10] ? Would you be able to share ?

LOL..I shall remove them then, since you're not happy with my codes, why not you provide your solution instead?
 

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
LOL..I shall remove them then, since you're not happy with my codes, why not you provide your solution instead?

I have nothing against your solution, it's more of the way you presented them. No one is perfect, including me. However, when I pointed out your mistake since you presented them as solution for TS, where the flaw may be, they ought to be acknowledge or you can always present your case, so that TS, or perhaps you too, may learn from example on why things are done certain way. Would you not agree ?

I have presented enough solutions when working as a tutor during my days with NUS, so I would gladly let others do so now :)
 

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
Deleted, our senior member hate it. =)

Sad to know nowadays some people are so unsporting, didn't get the answer right and have to suggest others have anything to do with it ? Weird...

Code:
#include <Windows.h>
#include <iostream>

int main()
{
	int number[10];
	int output;

	std::cout << "Generating 10 random numbers between 15 and 150." << std::endl;
	
	for(int i = 1; i <= 10; ++i)
	{
		output = rand() % 135 + 15;
		std::cout << i << ". " << output << std::endl;
		number[i] = output;
	}
		
	std::cout << "Check if the output falls within which region." << std::endl;

	for(int i = 0; i < sizeof(number); ++i)
	{
		if(number[i] >= 15 && number[i] <= 50)
		{
			std::cout << "Number [" << number[i] << "] is between 15 and 50" << std::endl;
			continue;
		}

		if(number[i] >= 51 && number[i] <= 100)
		{
			std::cout << "Number [" << number[i] << "] is between 51 and 100" << std::endl;
			continue;
		}

		if(number[i] >= 101 && number[i] <= 150)
		{
			std::cout << "Number [" << number[i] << "] is between 101 and 150" << std::endl;
			continue;
		}
	}
	
	std::cin.get();
	return 0;
}

Since someone just 啪啪屁股走人, for the benefit of TS, I shall comment why the earlier codes are not only incorrect but also don't follow best practices.

Lets read the question carefully

Write a program, using a for loop, to generate 10 random numbers between 15 and 150, inclusive. Then, the program should print how many of those numbers fall into the following categories: (1) between 15 and 50, inclusive; (2) between 51 and 100, inclusive, and (3) between 101 and 150, inclusive. Assume there is no user input for this program.

Point 1:

The question ask for 10 random numbers in the range of [15, 150]. The important part is inclusive.
rand() % 135 + 15 will only give the range [15, 150). Take note of the mathematical notation used here. X % N will only produce a range of [0, N), that means N is never part of the answer. So given rand() % 135 largest number of 134, 134 + 15 --> 149. So how can that give a inclusive range of [15, 150] ?

Point 2:

Since the question is asking "how many of those numbers fall into the following categories". It's asking for a cumulating output. Meaning it's not asking you to print out each randomly generated number. It's asking you to accumulate them into their respective categories and print out how many of them are in each category. I could have interpret it wrongly, but well.... lets see.

Now about where the flaws are

Flaw 1:

Code:
int number[10];
...
for(int i = 1; i <= 10; ++i)
	{
		output = rand() % 135 + 15;
		std::cout << i << ". " << output << std::endl;
		number[i] = output;
	}

The actual elements available in number of from number[0] to number[9]. number[10] do not really exist. This set of codes basically is in the risk of segmentation fault. It will run most of the time because the way how memory are allocated by the allocator to be in paged form. However if number[10] ever cross the memory page alignment into any part of the memory not bounded by the process, it will result in illegal memory access or segmentation fault. Another point to note is output variable is not necessary.

Flaw 2:
Code:
for(int i = 0; i < sizeof(number); ++i)
	{
		if(number[i] >= 15 && number[i] <= 50)
		{
			std::cout << "Number [" << number[i] << "] is between 15 and 50" << std::endl;
			continue;
		}

		if(number[i] >= 51 && number[i] <= 100)
		{
			std::cout << "Number [" << number[i] << "] is between 51 and 100" << std::endl;
			continue;
		}

		if(number[i] >= 101 && number[i] <= 150)
		{
			std::cout << "Number [" << number[i] << "] is between 101 and 150" << std::endl;
			continue;
		}
	}

Such practices are bad coding style. It is alright to use continue to short cut loop block if necessary, but here is unnecessary because a set of if..else blocks will suffice and also structurally indicate the intention of the developer into the code instead of bailing out in such manner, which may require more reading into the intention. If a developer use a set of if..else statements, it means the flow to enter each block is mutually exclusive. You don't need comment to further imply that since that's how if..else block runs. However using continue in these manner do not structurally imply these intentions. If the code is any more complicated, it will be hard to tell.

I have also indicated that re-validation of certain condition if not necessary, which only indicate the developer is not able to interpret the actual flow of the logic. If explicit is required, use comments instead.

sizeof(number) is for the number of bytes requires to represent the int array of 10 elements, each INTeger datatype is 4 bytes. Therefore sizeof(number) where the compiler knows number is an array of 10 int elements gives the answer of 40. The correct approach is sizeof(number)/sizeof(number[0]). However a more proper approach is use macros instead.


In all cases, these codes don't answer the question at all, if based on how I interpreted the question.


Below I shall post my solution to the question.
PHP:
#include <iostream>

using namespace std;

// go find out what is the value of macros
#define NO_OF_RAND    10
#define NO_OF_BUCKETS  3

int main(int argc, char **argv) {

  int buckets[NO_OF_BUCKETS] = { 0 }; // go find out what does this initializer do

  srand(time(NULL)); // go find out why this is important

  cout << "Generating 10 random numbers between 15 and 150." << endl;

  for (int i = 0; i < NO_OF_RAND; i++) {
    int r = rand() % 136 + 15;

    //printf("%d %d\n", r, (r - 1) / 50);
    buckets[(r - 1) / 50]++; // so here you see if if..else blocks are even necessary
  }

  // final output
  cout << buckets[0] << " random numbers in the range [15,50]" << endl
       << buckets[1] << " random numbers in the range [51,100]" << endl
       << buckets[2] << " random numbers in the range [101,150]" << endl;

  return 0;
}
 
Last edited:

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
here is my code for qn 2 , any improvements etc?

Better, but can still have improvements. For ease of reference, I shall comment into your codes below using DKSG: comment

Code:
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
  int a=0;
  int b=0;
  int c=0;
  int d=0;
  int e=0;
  
  // DKSG: using all single letter variables like the above is a bad choice of naming convention.
  // DKSG: due to legacy, iterators will normally use i, j, k, l etc single letters due to convenience
  // DKSG: such naming is granted and widely accepted, but if the variable has specific purpose,
  // DKSG: better naming conventions where other developers reading your codes can easily
  // DKSG: decipher the usage and intention of the variable will be preferable.
  
  // DKSG: I believe you can use "cntBet15n50", "cntBet51n100" as variables names.
  // DKSG: This is the Camel case style naming convention with more meaningful names.
  // DKSG: For legacy C/C++ naming convention, they like to use underscore(_) to separate the tokens
  // DKSG: such as "cnt_bet_15n50" etc.
  
  int numberchangingone[10];

  srand ((unsigned)time(0)); //initialise random seed

  for( int a=0;a<10;a++)// assign a value to each numberchangingone[] and display the value of it out
  {
  // DKSG: Are you sure below is answering your question of range [15,150]?
  numberchangingone[a]=rand() % 135 + 15;
  cout<<numberchangingone[a]<<endl;
  }
  for( int b=0;b<10;b++)
  {
  
  if(numberchangingone[b]<=50)
  {
    c++;
  }
  else if(numberchangingone[b]>=51 && numberchangingone[b]<=100)
  {
    // DKSG: Like I have mentioned in the earlier post, since your first if block already
    // DKSG: accounted for X <= 50, then naturally to get into this block, X must be > 50
    // DKSG: thus testing for X > 50 is not required. Testing for X <= 100 would have
    // DKSG: been testing for lower bound of X > 50
  
    d++;
  }
  else if(numberchangingone[b]>=101 && numberchangingone[b]<=150)
  {
    e++;
  }
  }
  cout<<"The number of numbers that fall into Category 1 is: "<<c<<endl;
  cout<<endl;

  cout<<"The number of numbers that fall into Category 2 is: "<<d<<endl;
  cout<<endl;

  cout<<"The number of numbers that fall into Category 3 is: "<<e<<endl;
  cout<<endl;


  return 0;
}
[/QUOTE]
 
Last edited:

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
Code:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>
#include <sstream>

using namespace std;

int main()
{
  int input=0;
  int count=0;
  int a=0;
  int b=0;
  char Plaintext[52]={'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q'
  ,'R','r','S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z'};
  
  char Secretlanguage[52]={'S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z','A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i'
  ,'J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r'};



  cout<<"Please enter your one word secret message"<<endl;
  cin>>input;
  for( int a=0;a<53;a++)
  {
  Plaintext[a]=Secretlanguage[a];
  }

  return 0;
}

Normally for this problem, I wouldn't even employ array, but since it's mentioned in the question to use array, then just have to follow.
Even if I will to use an array, I only need one. I'm curious why 2 is necessary.

Your approach is wrong. The idea of using 2 arrays is using a simple lookup concept.
If it's using 2 arrays, where one is the original mapping and the other is the encoding table, meaning

if I want to map A -> j, B -> u, C -> k, my 2 arrays would be

char plainText[3] = { 'A', 'B', 'C' };
char cipherMap[3] = { 'j', 'u', 'k' };

All you need to do is when given 'C', find the offset of 'C' in the array 'plainText', in this case is index 2
So just use cipherMap[2], the output is 'k'. This means 'C' -> 'k'.

The above sample is not Caesar Cipher technique, it's just a generic mapping technique. Caesar Cipher merely is a shift cipher technique.

Your loop should loop thru each character in your input. Then for each character in the input, look thru the Plaintext and find the offset/index.
Use this index to obtain your corresponding secret character.

I think the person whom set this question using array is not thoughtful enough. I wouldn't provide my solution, but it doesn't require any array at all. :)
 

lexias

Senior Member
Joined
Mar 31, 2012
Messages
1,605
Reaction score
0
Wow i googled the qns for research and found this wtf lol is this even allowed for a graded assignment??
 

davidktw

Arch-Supremacy Member
Joined
Apr 15, 2010
Messages
13,547
Reaction score
1,301
Wow i googled the qns for research and found this wtf lol is this even allowed for a graded assignment??

I think for people whom can do each assignment on their own, it's all the merrier. In fact, if each student has own discipline in need no help to figure this out, or ask specific questions on understanding the concepts and principles towards the answer of any assignment, one will learn more and be a better person.

However unfortunately, seems like you wouldn't find a lot of such kind of students around. Rather than giving answers, it will be seemingly a good attempt to guide them along the way, make them think more, hopefully.

For really good students, you wouldn't have them asking questions in the open because they take it strongly in their pride to get things done themselves.

:)
 
Important Forum Advisory Note
This forum is moderated by volunteer moderators who will react only to members' feedback on posts. Moderators are not employees or representatives of HWZ Forums. Forum members and moderators are responsible for their own posts. Please refer to our Community Guidelines and Standards and Terms and Conditions for more information.
Top