### Author Topic: My first steps in learning C  (Read 784 times)

• Member
• Posts: 6
##### My first steps in learning C
« on: December 07, 2020, 11:47:27 pm »
Hello
I try to implement in C the following: I wish to organize the following number: 1234 in a triangle form, let's say :   3
23
1234
The idea is to break the number in 4 digits , divide every digit in modulo 2 and keep the rest , getting rid of the digit and going to the following one, starting from x^0 , to x^3 ( units, tenth, hundreds , thousands), and finally printing them in the order i choose.
So, my program is:
#include<stdio.h>
int main(void)
{
unsigned long x;
unsigned x0,x1,x2,x3;
scanf("%lu",&x);
x0%10;  //keep the units digit
x/10; // get rid of the units
x1%10;  //keep the tenth
x/10;  // get rid of tenth
x2%10;  //keep the hundreds
x/10;  //get rid of hundreds
x3%10;  // keep the hundreds
x/10; // in x remain the thousands
printf("   %u\n",x2);  // space , space, x2
printf(" %u%u\n",x2,x1);  /space x2.x1
printf("%lu%u%u%u\n, x3,x2,x1,x0);  /no space, x3,x2,x1,x0
return 0; }

And  the result after input : 1234 , compile is : 3
34
1233
Thank you

#### algernon_77

• Member
• Posts: 19
##### Re: My first steps in learning C
« Reply #1 on: December 08, 2020, 06:54:12 am »

I'm not sure I understand exactly what you want to accomplish (you say modulo 2, but you use modulo 10 in code); However, I changed the code a bit to get to the result I believe you seek:

Code: [Select]
`    unsigned long x;    unsigned x0,x1,x2,x3;    printf("please print your number:\n");    scanf("%lu",&x);    x0 = x % 10;  //units    x  = x / 10;    x1 = x % 10;  //tens    x  = x / 10;    x2 = x % 10;  //hundreds    x  = x / 10;     x3 = x % 10;  //thousands    printf("  %u\n", x1);    printf(" %u%u\n", x2, x1);    printf("%lu%u%u%u\n", x3, x2, x1, x0);`
Please note the use of the equal sign to actually assign the result to your variables and the use of x1 variable instead of x2 in the first printf.
Good luck!
« Last Edit: December 08, 2020, 01:38:26 pm by algernon_77 »

• Member
• Posts: 6
##### Re: My first steps in learning C
« Reply #2 on: December 08, 2020, 09:36:11 pm »
Hello Algernon_77
Thank you very much for your help!
As soon as i finish my reply to you I will try it on my C compiler ( Pelles of corse )
I feel surely very confused as i am learning from a book that used Borland compiler for explaining and I can not have that for the moment.
May I kindly ask you to let me know where can i find a free tutorial for C ? It is obvious i need to start again my study, confusing %modulo 2 with modulo 10 is not acceptable...
Kindest regards,

• Member
• Posts: 6
##### Re: My first steps in learning C
« Reply #3 on: December 08, 2020, 10:51:50 pm »
/*This program is intended to organize the digits of a number in a triangle shape */

#include<stdio.h>
int main(void)
{
unsigned long x;
unsigned x0,x1,x2,x3;

scanf("%lu",&x);

x0=x%10;  //units
x=x/10;

x1=x%10;  //tens
x=x/10;

x2=x%10;
x=x/10;

x2=x%10; //hundreds
x/10;

x3=x%10;  //thousands

printf("   %u\n",x1);
printf("  %u%u\n",x2,x1);
printf(" %u%u%u\n",x3,x2,x1);
printf("%lu%u%u%u\n",x3,x2,x1,x0);

return 0;}

So, after building the project i get : 3
13
113
1134
Could you please help me understand where is my mistake ? ( my number is : 1234 )
Thank you very much
« Last Edit: December 08, 2020, 10:54:26 pm by Adrian Rizeanu »

#### algernon_77

• Member
• Posts: 19
##### Re: My first steps in learning C
« Reply #4 on: December 09, 2020, 06:29:27 am »
Hello!

It does not work because you assign x mod 10 to x2, then divide x by 10, then assign x mod 10 to x2 again, overwriting it:

Code: [Select]
`   x2=x%10;   x=x/10;   x2=x%10; //hundreds   x/10;`

But I also made a mistake in the first printf it should be x3, not x1... sorry for the confusion:

Code: [Select]
`int main(void){    // you can make them all unsigned, it's the same size as unsigned long (32 bit)    unsigned x,x0,x1,x2,x3;    printf("please print your number:\n");    scanf("%lu",&x);     x0 = x % 10;  //units    x  = x / 10;    x1 = x % 10;  //tens    x  = x / 10;    x2 = x % 10;  //hundreds    x  = x / 10;     x3 = x % 10;  //thousands    printf("   %u\n", x3);    printf("  %u%u\n", x2, x1);    printf(" %u%u%u\n",x3,x2,x1);    printf("%u%u%u%u\n", x3, x2, x1, x0);    return 0;}`
As for books, "The C programming language" by Kernighan and Ritchie would be nice, but there's also a lot of tutorials online.
« Last Edit: December 09, 2020, 07:01:18 am by algernon_77 »

#### John Z

• Member
• Posts: 154
##### Re: My first steps in learning C
« Reply #5 on: December 09, 2020, 01:46:34 pm »

There are many, many on-line books and tutorials.  Here is one that has a downloadable pdf.  FREE -
https://riptutorial.com/ebook/c

which is under:
https://riptutorial.com/

John Z

#### John Z

• Member
• Posts: 154
##### Re: My first steps in learning C
« Reply #6 on: December 09, 2020, 02:41:35 pm »

So I supposed the task was to learn about Mod 10?  But if just want the triangle here is another method.

Code: [Select]
`#include <stdio.h>#include <stdlib.h>#include <string.h>int main (void) { int loup;   int x;   char temp[25];   printf("please print your number:\n");   scanf("%lu",&x);   sprintf(temp,"%d",x);   for( loup=strlen(temp); loup>0; loup--) { printf("%15s\n",temp+loup-1); }   return(0);}`
Since you are learning you can play with this and figure out its workings.
This works for a wide range of input numbers.  You might see that for numbers over four digits your original code will fail to give you the results you want, and for number less than 1000 you will see a tree with zero's.
Also try entering -1234
C is well worth learning.

John Z

• Member
• Posts: 6
##### Re: My first steps in learning C
« Reply #7 on: December 09, 2020, 11:18:56 pm »
Hi algernon_77 , Hi John ,
Thank you both for helping me to advance in my study !
It is late now and i am not capable to go through all your , so nice , messages, my day was full of tasks... and at 69 years old energy is not what it used to be.
Tomorrow i will give full attention and , with your permission , i will bother you again.
I look forward to test your ideas and learn from them as much as i can.
Have a great night !

#### John Z

• Member
• Posts: 154
##### Re: My first steps in learning C
« Reply #8 on: December 10, 2020, 01:56:20 pm »

Well just to play around I added a few more methods and some comments in the code
Code: [Select]
`#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>int main (void) { int loup; int z; char temp[25]; char a[25]; memset(a,0,25);  printf("please enter your number:\n");  scanf("%lu",&z);//--------------------------------------------------------------  printf("Output #1 reverse order\n");  sprintf(temp,"%d",z);                   // put number into string  for( loup=strlen(temp); loup>0; loup--) // loop right to left { printf("%15s\n",temp+loup-1);}      // print it//-------------------------------------------------------------- printf("\nOutput #2 in desired order\n"); sprintf(temp,"%d",z);                   // put number into string sprintf(a,"%s","");                     // clear temp string   for( loup=0; loup<strlen(temp); loup++) // loop left to right through the digits { strncpy(a,temp,loup+1);            // copy loup count chars from temp to a   printf("%15s\n",a);                // print the characters          memset(a,0,25);                    // clear for next group }                   //---------------------------------------------------------------                                        printf("\nOutput #3 in desired order\n");  // needs math.h int n = (int)log10(abs(z));                // how many digits 0 based for (loup = n; loup > -1 ; loup--)         // get each digit group { printf("%15d\n", (int)(z/(pow(10,loup)))); } // print it//---------------------------------------------------------------   // original    // you can make them all unsigned, it's the same size as unsigned long (32 bit)    unsigned x,x0,x1,x2,x3;    x=(unsigned int)z; // to maintain original intent on unsignedness//    printf("please enter your number:\n");//    scanf("%lu",&x);     x0 = x % 10;  //units    x  = x / 10;    x1 = x % 10;  //tens    x  = x / 10;     x2 = x % 10;  //hundreds    x  = x / 10;     x3 = x % 10;  //thousands    printf("\nOriginal Output #4\n");    printf("   %u\n", x3);    printf("  %u%u\n", x2, x1);    printf(" %u%u%u\n",x3,x2,x1);    printf("%u%u%u%u\n", x3, x2, x1, x0);   return(0);}`
Try different length input numbers and minus numbers too.

Enjoy,
John Z
« Last Edit: December 10, 2020, 02:09:01 pm by John Z »

• Member
• Posts: 6
##### Re: My first steps in learning C
« Reply #9 on: December 10, 2020, 10:50:59 pm »
Thank you John!
I downloaded the book, thank you so very much, just wonderfull !
I am learning C at my age as Now  I find a little time to improove my work with mucrocomputers ( PICs, generally ), I work a lot in assembler as i do small projects , but working in C will help me a lot.
Kindest regards, and I hope you will have a quiet , healthy and prosperous Christmas and a very Happy New Year !

#### John Z

• Member
• Posts: 154
##### Re: My first steps in learning C
« Reply #10 on: December 11, 2020, 11:36:46 am »

Small world. I've also done a number of PIC projects, used both assembly and PicBasic Pro by microengineering labs. Also 6502,6800,Z80, x86 of course.  Parallax stamps in a few projects too.

Merry Christmas and Happy New Year to you and yours as well.

Stay COVID safe,
John

P.S. as long as your slide rule still works you are not old!

#### Bitbeisser

• Global Moderator
• Member
• Posts: 769
##### Re: My first steps in learning C
« Reply #11 on: December 25, 2020, 07:29:58 am »
Hello Algernon_77
Thank you very much for your help!
As soon as i finish my reply to you I will try it on my C compiler ( Pelles of corse )
I feel surely very confused as i am learning from a book that used Borland compiler for explaining and I can not have that for the moment.
If you are using Borland C or Pelle's C, as far as such simple assignments and operations go, there is no difference. C is C. Only the handling of an IDE or compiler parameter might differ but not such trivial things...

Ralf