Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   help with a simple question (http://www.go4expert.com/forums/help-simple-question-t16693/)

 ShaiAdar 27Mar2009 22:34

help with a simple question

I need to code a function that takes a number, and if it's not negative or zero (if it's zero then the function quits), it checks if it's digits are rising from left to right (123, for example), and if they are, it prints it.

One problem I have with this is that if I knew the number had only 3 digits then I would divide it by 10, 100, 1000 and check those three numbers, but I don't know how many digits will be in the number the user types in, so I don't know what to do with that.

Can anyone help me with this?

Thanks.

 xpi0t0s 28Mar2009 03:05

Re: help with a simple question

There are two ways you could look at this.

(1) If they're rising from left to right then they're descending from right to left.
So modulo (%) the number with 10, record that, divide the test number by 10, repeat until the number is zero.

(2) Divide by 10, 100, 1000 etc as originally planned, but do it in a loop multiplying the number you divide by, by 10, until that power of 10 is greater than the number. So if you've got 1234, then you stop at 10000.

so: x=10
divide num by x
x*=10
repeat until x>num

 ShaiAdar 28Mar2009 10:10

Re: help with a simple question

Thank you very much, xpi0t0s!

 ShaiAdar 28Mar2009 16:09

Re: help with a simple question

Here is the code I wrote for the function (I deleted my comments to make the code cleaner):

Code:

```int number() {     int num;     int num_test;     int num_ok = 2;     int mod1, mod2;     int sum = 0;         while(num > 0)     {     printf("Please insert an integer:\n");     fflush(stdin);     scanf("%d",&num);         num_test = num;r     while(num_test > 0 && num_ok != 0)     {         mod1 = num_test%10;         mod2 = (num_test/10)%10;         if(mod2 > mod1);             num_ok = 1         else num_ok = 0;                 if(num_test = 0 && num_ok == 1);             sum = sum + num;     }         printf("%d\n", &sum); } }```
Any feedback would be appreciated.

 ClayC 28Mar2009 17:55

Re: help with a simple question

hey guys, I like the subject here, I personally had some problems with this stuff

so I done some time looking for a path and I found one!

ok what you do is get the number of course (must get it as string for best results) then with an if statement check if it's lower then zero,
if it is you start a new array string, and with a for loop you will do this
list_num[i] = num;
list_num[i].Remove(1);
num.Remove(0, 1);

that way you will have the array having all the numbers for you, then with a while loop you can check wether the number are increasing or not, you can also switch some number's positions or remove any index or even replace a single number with a high number like 1000 :P

anyway I hope I helped you enough, sorry that I didn't just post the code but it's better to use logic so the reader gets better view of what will happen and why, if you can't get it don't hasitate to reply, I will post code then!
---
ClayC

 ShaiAdar 28Mar2009 18:29

Re: help with a simple question

Quote:
 Originally Posted by ClayC (Post 44950) hey guys, I like the subject here, I personally had some problems with this stuff so I done some time looking for a path and I found one! ok what you do is get the number of course (must get it as string for best results) then with an if statement check if it's lower then zero, if it is you start a new array string, and with a for loop you will do this list_num[i] = num; list_num[i].Remove(1); num.Remove(0, 1); that way you will have the array having all the numbers for you, then with a while loop you can check wether the number are increasing or not, you can also switch some number's positions or remove any index or even replace a single number with a high number like 1000 :P anyway I hope I helped you enough, sorry that I didn't just post the code but it's better to use logic so the reader gets better view of what will happen and why, if you can't get it don't hasitate to reply, I will post code then! --- ClayC
Hi ClayC,
I think my code does the job okay, though it had a mistake that I fixed (= instead of a == near the end).

About the array idea, we aren't allowed to use arrays yet, since we haven't studied them in the course yet (this is the first exercise).

 ClayC 28Mar2009 22:26

Re: help with a simple question

oh ok, well I tried to help you out ;)

and you haven't done arrays yet and you did the % stuff after the line which I never saw lol, that's kinda confusing cause arrays are variables and variables are first steps to learn a new language lol

anyway it's good to know you have a working code for what you wanted, :) if there's something else you want help with ask me and I will help you out

 ShaiAdar 28Mar2009 22:59

Re: help with a simple question

Here is the entire program(with comments):
Code:

```#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void rectangle(); //function that will draw a rectangle with dimensions provided by the user void number(); //function for printing the sum of positive integers whose digits are rising from left to right void main() {     int menu = 1; //while this variable is set to 1, the loop that shows the menu continues     int choice = 0; //a variable to store the menu choice the user makes     char exit = 'n'; //stores the choice the user makes in the 3rd menu item     while(menu == 1)     {         while(choice <= 0 || choice > 3) //if the user enters an invalid value, the menu will appear again         {         printf("\nChoose an item from the menu:\n");         printf("1. Draw a rectangle!\n");         printf("2. Calculate a sum!\n");         printf("3. Exit?\n");                 fflush(stdin);         scanf("%d", &choice);         }     if(choice == 1) //for each choice, except 3, the appropriate function is executed         rectangle();     if(choice == 2)         number();     if(choice == 3) //this choice is built into the main function     {         printf("Do you really want to quit? Press 'y' or 'Y' to confirm, any other key to cancel");         scanf("%c", exit);         if(exit == 'Y' || exit == 'y')             menu = 0;     }     }        } void rectangle() {     int length, width; //dimensions of the rectangle     int dimensions;  //variable to check if the coordinates of the symbol are okay     int row, col; //row and column coordinates of the symbol     int symbol_count; //how many “-“ were printed     int row_count; //used to track how many rows were printed in the rectangle     char symbol = 'n'; //the symbol the user chooses to print inside the coordinates         printf("Please enter the length and width of the rectangle, seperated by a space\n"); //requesting the dimensions of the rectangle from the user     scanf("%d %d",&length, &width);     if(length < 0) //checking if the coordinates of the rectangle given by the user are negative         length = -length;     if(width < 0)         width = -width;     dimensions = 0;     while(dimensions == 0) //checking if the coordinates given for the symbol are not negative or too big         {             printf("Please enter the row and column coordinates of a point in the rectangle,\n seperated by a space\n");             scanf("%d %d",&row, &col);                         if(row >= 0 && row <= length)             {                 if(col >=0 && col <= width)                     dimensions = 1;                 else                     printf("Invalid column coordinates\n");             }             else                 printf("Invalid row coordinates\n");         }     printf("Please enter a character to be printed in the rectangle\n"); //taking the character to be printed in the rectangle     fflush(stdin);     scanf("%c", symbol);     symbol_count = 0;     row_count = 0;     while(symbol_count < width*length) //once the symbol_count reaches the dimensions of the rectangle, the loop will break     {         if(symbol_count == col)             if(row_count == row)                 printf("%c", symbol);         else if(symbol_count == width)             printf("\n");         else             printf("-");         symbol_count++;     } } void number() {     int num; //this is the original number, which will be printed if it meets the criterion     int num_test; //the number will be working on in the function     int num_ok = 2; //the flag used to mark the number as good for adding to the sum that will be printed     int mod1, mod2; //variables that will be used to compare the digits of the number     int sum = 0; //the sum of "good" numbers, which is set to zero here and will be added to in the function.         while(num > 0) //the loop will continue for as long as the user enters positive numbers     {     printf("Please insert an integer:\n"); //taking the original integer     fflush(stdin);     scanf("%d",&num);         num_test = num; //setting test_number to the value of num, as entered by the user     while(num_test > 0 && num_ok != 0) //this loop will quit if the user enters a non-positive zero or a number with digits that aren't rising     {         mod1 = num_test%10;         mod2 = (num_test/10)%10;         if(mod2 > mod1) //once the user enters a number with digits that aren't rising, the expression in the if statement will be false and num_ok will be set to zero, which will break the loop             num_ok = 1; //if each of the digits passes the test, num_ok will remain equal to 1         else num_ok = 0;                 if(num_test == 0 && num_ok == 1); //if the division reached the final stage(num_test is equal to zero, and the num_ok flag is still equal to 1, then the number is valid and will be added to the sum             sum = sum + num;     }         printf("%d\n", sum); //printing the final sum } }```
It compiles but crashes on the first menu item when entering the character to be printed... (maybe it crashes later too, haven't checked yet)

Advice, anyone?

 xpi0t0s 29Mar2009 23:28

Re: help with a simple question

I don't know what "the first menu item when entering the character to be printed" means - could you clarify? Could you perhaps give the line that crashes (commented) plus one or two lines each side for context?
e.g.
Code:

```some code some code some code // this line crashes some code```

 All times are GMT +5.5. The time now is 23:40.