Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 232
  • Last Modified:

Help fixing compiling errors

To follow is my code for a program I'm trying to write. I would like someone to copy and paste it into their compiler and fix the errors. I have spent numerous hours trying to get it this far and I feel I've reached my capabilities.  If it compiles, I can then go back and compare my code with errors to the correct one, and learn from it. Yes this is for school, but I've already turned in the one with errors and will suffer the point loss. However, In order to complete the next assignment I need a working copy of this code.  I would greatly appreciate all help. If you need a copy of my error listing, please email me at elwayisgod@hotmail.com and I will send you one.  Thanks for any help that will come!!!!

code:

//preprocessor statements
#include<stdio.h>
#include<ctype.h>  
#define weight_one .35
#define weight_two .25
#define weight_three .40
#define MAX 100

/*function prototypes */
void DisplayGreeting(void);
void DisplayMenu(void);
long GetId(void);
short GetScore(void);
short ComputeExamDifference(short, short);
float ComputExamAverage(short, short);
short BestStudent(float);
short WorstStudent(float);
float ComputCourseAverage(short, short, short);
char ComputGrade(float);
void GenerateCourseReport(long, short, short, short, short, float, float,char);
void GenerateSummaryReport(long[],float[],char[],short);
long StudentSearch(long[], long[]);
void DisplayGradeReport(short, short, short, short, short);

main()
{
char junk;
char grade;
char Option;
long student_ID;
long target;
short student_score1;
short student_score2;
short student_score3;
short diff_score;
float average;
float final_average;
long ID_Array[MAX];
float Average_Array[MAX];
float final_average_Array[MAX];
char Grade_Array[MAX];
short count;
short Acount=0;
short Bcount=0;
short Ccount=0;
short Dcount=0;
short Fcount=0;
char A;
char R;
char F;
char B;
char W;
char Q;

DisplayGreeting();
while(Option!='Q')
{
if(Option=='Q')
break;
}
DisplayMenu();
do
{
if(Option==A)
student_ID = GetId();
printf("\n\nPlease enter the score for student %ld on Exam 1: ", student_ID);
student_score1= GetScore();
printf("\n\nPlease enter the score for student %ld on Exam 2: ", student_ID);
student_score2= GetScore();
printf("\n\nPlease enter the score for student %ld on the Class Project: ", student_ID);
student_score3= GetScore();
else if (Option==R)
GenerateSummaryReport(ID_Array, final_average_Array, Grade_Array, count);
diff_score = ComputeExamDifference(student_score1,student_score2);
average = ComputExamAverage(student_score1,student_score2);
Average_Array[count]=average;
final_average = ComputCourseAverage(student_score2, student_score2, student_score3);
final_average_Array[count]=final_average;
grade = ComputGrade(final_average);
Grade_Array[count]=grade;
else if (Option==F)
printf("\nEnter the student ID of the student you want to find:  ", student_ID);
result=StudentSearch(student_ID, target);
if(result!=MAX)
printf("\n\nStudent with number %d found in array positon %d", student_ID,target);
GenerateCourseReport(student_ID, student_score1, student_score2, student_score3, diff_score, average, final_average, grade);
else if (Option==B)
BestStudent(final_average);
GenerateCourseReport(student_ID, student_score1, student_score2, student_score3, diff_score, average, final_average, grade);
else if (Option==W)
WorstStudent(final_average);
GenerateCourseReport(student_ID, student_score1, student_score2, student_score3, diff_score, average, final_average, grade);
while(Option!= A && Option!= a && Option!= R && Option!= r
&& Option!= F && Option!=f && Option!=B&& Option!=b && Option!= W && Option!=w,
&& Option!= Q && Option!=q);
DisplayGradeReport(Acount, Bcount, Ccount, Dcount, Fcount);

void DisplayGreeting(void)
{
printf("\n\n      *******************************************");
printf("\n      *                                         *");
printf("\n      *   Welcome to the UCD ISMG 4950          *");
printf("\n      *    On-line Information System           *");
printf("\n      *                                         *");
printf("\n      ******************************************* \n");

return;
}
void DisplayMenu(void)
{
printf("\n\n      *** Course Option Menu ***");
      printf("\n\n(A) - Add student's course information");
      printf("\n\n(R) - Display summary course report");
      printf("\n\n(F) - Find a student display course information");
      printf("\n\n(B) - Find and display information for best student");
      printf("\n\n(W) - Find and display information for worst student");
      printf("\n\n(Q) - Quit");
            return;
}
long GetId(void)
{
long student_ID;
do
{
printf("\n\nPlease enter the student ID: ");
scanf("%i",&student_ID);
if(student_ID<0 || student_ID>999999999)
printf("\n***Error! Student ID of  %ld is out of range! ***", student_ID);
}
while(student_ID<0 || student_ID>999999999);
return(student_ID);
}

void GenerateSummaryReport(long ID_Array[], float final_average_Array[], char Grade_Array[], short count)
{
char junk;
int i;
for(i=0;i<count;i++)
printf("\n%i   %ld   %.2f   %c", i+1, ID_Array[i], final_average_Array[i], Grade_Array[i]);
}

long StudentSearch(long ID_Array[], long target)
{
int i;

      for(i=0; 1<MAX; i++)
            if(ID_Array[i] ==target)
                  return i;
      return i;
}
short GetScore(void)
{
short student_score;
do
{
scanf("%d",&student_score);
if(student_score<0 || student_score>100)
printf("\n***Error! Generic score of %d is out of range! ***", student_score);
}
while(student_score<0 || student_score>100);
return(student_score);
}
short ComputeExamDifference(short student_score1, short student_score2)
{
short diff_score;
diff_score = student_score2 - student_score1;
return(diff_score);
}
float ComputExamAverage(short student_score1, short student_score2)
{
float average;

average = (float) student_score1 + student_score2;
return(average);
}
float ComputCourseAverage(short student_score1, short student_score2, short student_score3)
{
float final_average;
final_average = student_score1 * weight_one + student_score2 * weight_two + student_score3 * weight_three;
return(final_average);
}
char ComputGrade(float final_average)
{
char grade;
printf("\nStudent's average for the course is %4.2f \n", final_average);
if (final_average >=90)
return 'A';
else if (final_average >=80)
return 'B';
else if  (final_average >=70)
return 'C';
else if (final_average >=60)
return 'D';
else
printf("\nStudent's grade in the course is F \n");
return(grade);
}
void GenerateCourseReport(long student_ID, short student_score1, short student_score2, short student_score3, short diff_score, float average, float final_average, char grade)
{
char junk;
printf("\n\n**** Course Report for Student %i **** \n", student_ID);
printf("\nStudent scored %.0d on Exam 1", student_score1);
printf("\nStudent scored %.0d on Exam 2", student_score2);
printf("\nStudent scored %.0d on Class Project", student_score3);
printf("\n\nStudent scored %.0d points differently on Exam 2 versus Exam 1 \n", diff_score);
printf("\nStudent's exam average is %.1f \n", average/2);
printf("\nStudent's average for the course is %.2f \n", final_average);
if (final_average >=90)
printf("\nStudent's grade in the course is A");
else if (final_average >=80)
printf("\nStudent's grade in the course is B");
else if  (final_average >=70)
printf("\nStudent's grade in the course is C");
else if (final_average >=60)
printf("\nStudent's grade in the course is D");
else
printf("\nStudent's grade in the course is F \n");
}

short BestStudent(float final_average_Array[])
{      
      char junk;
      int i;
      for(i=0; i<count-2; ++1)
            if(final_average[i]>final_average[1+i])
            {
                  beststudent=final_average[i];
                  final_average[i] = final_average[1+i];
                  final_average[1+i]= beststudent;
            }
            for(beststudent=0, b=0<count; ++b)
                  beststudent=final_average[b]>beststudent?b:beststudent;
            return(beststudent);
}
short WorstStudent(float final_average_Array[])
{      
      char junk;
      int i;
      for(i=0; i<count-2; ++1)
            if(final_average[i]<final_average[1+i])
            {
                  WorstStudent=final_average[i];
                  final_average[i] = final_average[1+i];
                  final_average[1+i]= WorstStudent;
            }
            for(WorstStudent=0, w=0<count; ++w)
                  WorstStudent=final_average[w]<WorstStudent?w:WorstStudent;
            return(WorstStudent);
}
void DisplayGradeReport(short Acount, short Bcount, short Ccount, short Dcount, short Fcount)
{
char junk;
printf("\n  *** ISMG 4950 Grade Distribution Report ***");
printf("\nNumber of A's                   %i", Acount);
printf("\nNumber of B's                   %i", Bcount);
printf("\nNumber of C's                   %i", Ccount);
printf("\nNumber of D's                   %i", Dcount);
printf("\nNumber of F's                   %i", Fcount);
printf("\n\nPress any key to continue");
fflush(stdin);
junk=getchar();
system("cls");
}
end;

0
elwayisgod
Asked:
elwayisgod
  • 6
  • 3
  • 3
  • +3
1 Solution
 
kellyjjCommented:
If you want this answered for visual Basic, maybe you ought to start a catagory.
0
 
kellyjjCommented:
I am sorry, I didn't relize that there is a VB spot.  That would be the place to post this.  
0
 
elwayisgodAuthor Commented:
Edited text of question
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
elwayisgodAuthor Commented:
Kellyjj,

It can be cut and pasted into any compiler and fixed. There are just minor differences that I can fix for visual basic 5.0. I only use Visual basic 5.0 as a compiler for this class. Other than that I know nothing about it. Our professor actually uses a different compiler than Visual Basic 5.0.  My question is a C language question. I need the errors fixed in the code. Other compilers will come up with the same errors.  I'm sorry for not properly asking the question. It is not a Visual Basic 5.0 question. It is a C language question.  All help would be greatly appreciated.

Thanks

Sam
0
 
ozoCommented:
cfe: Error: 10047352.c, line 71: Syntax Error
    else if (Option==R)
 ---^
cfe: Error: 10047352.c, line 80: Syntax Error
    else if (Option==F)
 ---^
cfe: Error: 10047352.c, line 87: Syntax Error
    else if (Option==B)
 ---^
cfe: Error: 10047352.c, line 91: Syntax Error
    else if (Option==W)
 ---^
cfe: Error: 10047352.c, line 97: Syntax Error
    && Option!= Q && Option!=q);
 ---^
cfe: Error: 10047352.c, line 97: Syntax Error
    && Option!= Q && Option!=q);
 -----------------------------^
cfe: Error: 10047352.c, line 100: Syntax Error
    void DisplayGreeting(void)
 ---^

0
 
elwayisgodAuthor Commented:
ozo,

I'm lost. This looks like the error report. Is that what your trying to tell me or was this a mistaken comment?  I'm confused let me know.

Thanks
0
 
kweCommented:
This program is huge for what it seems to be doing. Try using Switch-Case statements instead of If-Else-IF-Else.......

Try anything that will change the errors you are getting in order to get a better idea of what's going on.

BTW, Your code is too "structured". There are more function calls and such than there are actual useful code. Try to limit this. I'm not trying to be an ass, just trying to help a fellow programmer :o)
0
 
elwayisgodAuthor Commented:
kwe,

I'm not a programmer. I'm an accountant trying to learn this language because it is a required class.  If you can fix it please do so and I'll try pasting it into my compiler to see what happens. The next thing were doing is learning pointers and such, but i cant use those on this program.
0
 
nebekerCommented:
Your code can't be fixed in a forum like this.

When I ran it through the compiler, I got 42 separate errors and 13 really bad warnings.  There are a few logic problems as well.

Here's a few tips to get things started:

1.  Whenever you want to have more than one statement follow an "if", you have to have a set of curly braces.  For example:

   if( Option == 'A' )
   {
        student_ID = GetD();
        printf( "Please enter score: " );
        student_score = GetScore();
   }
   else if (Option == 'R')
   {
       /* statements for Option 'R' go here...
   }

2.  You need to initialize variables before you use them.  You've declared the following:

   char A;
   char R;
   char Option;

   and then checking:

   if( Option == R )

   this won't work, because R isn't set to anything.  Either you missed the single quotes around R, or you should have defined it as:

    char A = 'A';
    char R = 'R';

You should probably use the 'A' in your code and get rid of the variable declarations for A, R, etc.

3.  Never put a semicolon after a while statement.  For example:

    while( Option == 'A');

    is nothing more than an infinite loop.  While statements should follow the same rules as if() statements:  if you want more than one thing to happen, use the curly braces:

    while( Option == 'A' )
    {
        printf( "Enter another option: " );
        Option = getch();
    }

4.  I don't see how you can use VB as a compiler for a C class.  VB is a completely different language.  If you don't have a C compiler, there's really no reason to even do your homework, since you won't be able to check any of your answers.  You should either find a compiler at school, or download the GNU C compiler (gcc) from the internet.

If you want to clean up the items I've mentioned above, send me the cleaned-up version, and I'll point out the rest of the problems.  Send the source to:  dnebeker@hotmail.com, and include the type of system that it will be compiled on...

0
 
kellyjjCommented:
elway  ( Raiders Rule!!! hehe, just had to throw that in)

Ok, I have looked at all that is posted for this question.  Couple of questions:

First,  Is the class you wrote for C or VB??  
Are you working in dos, windows....??

If the code was writen for VB then you can't use it in a C program, except maybe as dll,  but you still can't put raw code into it.  
The platform you are trying to work with is important as well. I assume you are working with windows since I don't think VB has a dos compiler.   If this is the case you will have to compile the above code in a VB compiler as a dll, then link that into your C program.  But that maybe more work than it is worth.

Some helpful debugging tips:
Always start with the first error and work your way down. A lot of times fixing 1 thing can fix a lot of errors.  Like say leaving a ';' off the end of a line.  

If you are not sure what is wrong but you know about where in the code the problem is ... try writing a test program to do just that.  Like say you think that the input rountine is causing some problems, then write a small program to test it. It is easier to work with 50 lines of code than 500.  

Take a break.  Sometimes just leaving and coming back later is what is needed.  I know that sometimes I tend to think too much.

Hope this is helpful.  write me if you need more help.  

0
 
RONSLOWCommented:
Here are some corrections.

You code has lots of missing {} etc.

There also appear to be some major logic error.

Get the syntax right first, then check you logic.

Here is my version (still may not compile, but at least the code stands a chance)

//preprocessor statements
#include<stdio.h>
#include<ctype.h>  
#define weight_one .35
#define weight_two .25
#define weight_three .40
#define MAX 100

/*function prototypes */
void DisplayGreeting(void);
void DisplayMenu(void);
long GetId(void);
short GetScore(void);
short ComputeExamDifference(short, short);
float ComputExamAverage(short, short);
short BestStudent(float);
short WorstStudent(float);
float ComputCourseAverage(short, short, short);
char ComputGrade(float);
void GenerateCourseReport(long, short, short, short, short, float, float,char);
void GenerateSummaryReport(long[],float[],char[],short);
long StudentSearch(long[], long[]);
void DisplayGradeReport(short, short, short, short, short);

main()
{
      char junk;
      char grade;
      char Option;
      long student_ID;
      long target;
      short student_score1;
      short student_score2;
      short student_score3;
      short diff_score;
      float average;
      float final_average;
      long ID_Array[MAX];
      float Average_Array[MAX];
      float final_average_Array[MAX];
      char Grade_Array[MAX];
      short count;
      short Acount=0;
      short Bcount=0;
      short Ccount=0;
      short Dcount=0;
      short Fcount=0;
      char A;
      char R;
      char F;
      char B;
      char W;
      char Q;
      
      DisplayGreeting();
      while(Option!='Q')
      {
            if(Option=='Q')
            { /* this '{' was missing */
                  break;
            }
            DisplayMenu();
            do
            {
                  if(Option==A)
                  { /* this '{' was missing, the if was only controlling the next line, not the whole block */
                        student_ID = GetId();
                        printf("\n\nPlease enter the score for student %ld on Exam 1: ", student_ID);
                        student_score1= GetScore();
                        printf("\n\nPlease enter the score for student %ld on Exam 2: ", student_ID);
                        student_score2= GetScore();
                        printf("\n\nPlease enter the score for student %ld on the Class Project: ", student_ID);
                        student_score3= GetScore();
                  } /* the matching '}' goes here */
                  else if (Option==R)
                  { /* this '{' was missing, the if was only controlling the next line, not the whole block */
                        GenerateSummaryReport(ID_Array, final_average_Array, Grade_Array, count);
                        diff_score = ComputeExamDifference(student_score1,student_score2);
                        average = ComputExamAverage(student_score1,student_score2);
                        Average_Array[count]=average;
                        final_average = ComputCourseAverage(student_score2, student_score2, student_score3);
                        final_average_Array[count]=final_average;
                        grade = ComputGrade(final_average);
                        Grade_Array[count]=grade;
                  } /* the matching '}' goes here */
                  else if (Option==F)
                  { /* this '{' was missing, the if was only controlling the next line, not the whole block */
                        printf("\nEnter the student ID of the student you want to find:  ", student_ID);
                        result=StudentSearch(student_ID, target);
                        if(result!=MAX)
                              printf("\n\nStudent with number %d found in array positon %d", student_ID,target);
                        GenerateCourseReport(student_ID, student_score1, student_score2, student_score3, diff_score, average, final_average, grade);
                  } /* the matching '}' goes here */
                  else if (Option==B)
                  { /* this '{' was missing, the if was only controlling the next line, not the whole block */
                        BestStudent(final_average);
                        GenerateCourseReport(student_ID, student_score1, student_score2, student_score3, diff_score, average, final_average, grade);
                  } /* the matching '}' goes here */
                  else if (Option==W)
                  { /* this '{' was missing, the if was only controlling the next line, not the whole block */
                        WorstStudent(final_average);
                        GenerateCourseReport(student_ID, student_score1, student_score2, student_score3, diff_score, average, final_average, grade);
                  } /* the matching '}' goes here */
                    /* what are you trying to do here ...
                    while(Option!= A && Option!= a && Option!= R && Option!= r
                    && Option!= F && Option!=f && Option!=B&& Option!=b && Option!= W && Option!=w,
                    && Option!= Q && Option!=q);
                    DisplayGradeReport(Acount, Bcount, Ccount, Dcount, Fcount);
                  */
            }      /* missing '}' goes here */
      }      /* missing '}' goes here */
}      /* missing '}' goes here */
void DisplayGreeting(void)
{
      printf("\n\n      *******************************************");
      printf("\n      *                                         *");
      printf("\n      *   Welcome to the UCD ISMG 4950          *");
      printf("\n      *    On-line Information System           *");
      printf("\n      *                                         *");
      printf("\n      ******************************************* \n");
      
      return;
}
void DisplayMenu(void)
{
      printf("\n\n      *** Course Option Menu ***");
      printf("\n\n(A) - Add student's course information");
      printf("\n\n(R) - Display summary course report");
      printf("\n\n(F) - Find a student display course information");
      printf("\n\n(B) - Find and display information for best student");
      printf("\n\n(W) - Find and display information for worst student");
      printf("\n\n(Q) - Quit");
      return;
}
long GetId(void)
{
      long student_ID;
      do
      {
            printf("\n\nPlease enter the student ID: ");
            scanf("%i",&student_ID);
            if(student_ID<0 || student_ID>999999999)
                  printf("\n***Error! Student ID of  %ld is out of range! ***", student_ID);
      }
      while(student_ID<0 || student_ID>999999999);
      return(student_ID);
}

void GenerateSummaryReport(long ID_Array[], float final_average_Array[], char Grade_Array[], short count)
{
      char junk;
      int i;
      for(i=0;i<count;i++)
            printf("\n%i   %ld   %.2f   %c", i+1, ID_Array[i], final_average_Array[i], Grade_Array[i]);
}

long StudentSearch(long ID_Array[], long target)
{
      int i;
      
/*      for(i=0; 1<MAX; i++) should be */
      for(i=0; i<MAX; i++)
            if(ID_Array[i] ==target)
                  return i;
            return i;
}
short GetScore(void)
{
      short student_score;
      do
      {
            scanf("%d",&student_score);
            if(student_score<0 || student_score>100)
                  printf("\n***Error! Generic score of %d is out of range! ***", student_score);
      }
      while(student_score<0 || student_score>100);
      return(student_score);
}
short ComputeExamDifference(short student_score1, short student_score2)
{
      short diff_score;
      diff_score = student_score2 - student_score1;
      return(diff_score);
}
float ComputExamAverage(short student_score1, short student_score2)
{
      float average;
      
      average = (float) student_score1 + student_score2;
      return(average);
}
float ComputCourseAverage(short student_score1, short student_score2, short student_score3)
{
      float final_average;
      final_average = student_score1 * weight_one + student_score2 * weight_two + student_score3 * weight_three;
      return(final_average);
}
char ComputGrade(float final_average)
{
      char grade;
      printf("\nStudent's average for the course is %4.2f \n", final_average);
      if (final_average >=90)
            return 'A';
      else if (final_average >=80)
            return 'B';
      else if  (final_average >=70)
            return 'C';
      else if (final_average >=60)
            return 'D';
      else
            printf("\nStudent's grade in the course is F \n");
      return(grade);
}
void GenerateCourseReport(long student_ID, short student_score1, short student_score2, short student_score3, short diff_score, float average, float final_average, char grade)
{
      char junk;
      printf("\n\n**** Course Report for Student %i **** \n", student_ID);
      printf("\nStudent scored %.0d on Exam 1", student_score1);
      printf("\nStudent scored %.0d on Exam 2", student_score2);
      printf("\nStudent scored %.0d on Class Project", student_score3);
      printf("\n\nStudent scored %.0d points differently on Exam 2 versus Exam 1 \n", diff_score);
      printf("\nStudent's exam average is %.1f \n", average/2);
      printf("\nStudent's average for the course is %.2f \n", final_average);
      if (final_average >=90)
            printf("\nStudent's grade in the course is A");
      else if (final_average >=80)
            printf("\nStudent's grade in the course is B");
      else if  (final_average >=70)
            printf("\nStudent's grade in the course is C");
      else if (final_average >=60)
            printf("\nStudent's grade in the course is D");
      else
            printf("\nStudent's grade in the course is F \n");
}

/*
the algorithm for BestStudent and WorstStudent
doesn't seem to make sense.
think it out again
*/
short BestStudent(float final_average_Array[])
{
      char junk;
      int i;
      for(i=0; i<count-2; ++1)
            if(final_average[i]>final_average[1+i])
            {
                  beststudent=final_average[i];
                  final_average[i] = final_average[1+i];
                  final_average[1+i]= beststudent;
            }
            for(beststudent=0, b=0<count; ++b)
                  beststudent=final_average[b]>beststudent?b:beststudent;
            return(beststudent);
}
short WorstStudent(float final_average_Array[])
{
      char junk;
      int i;
      for(i=0; i<count-2; ++1)
            if(final_average[i]<final_average[1+i])
            {
                  WorstStudent=final_average[i];
                  final_average[i] = final_average[1+i];
                  final_average[1+i]= WorstStudent;
            }
            for(WorstStudent=0, w=0<count; ++w)
                  WorstStudent=final_average[w]<WorstStudent?w:WorstStudent;
            return(WorstStudent);
}
void DisplayGradeReport(short Acount, short Bcount, short Ccount, short Dcount, short Fcount)
{
      char junk;
      printf("\n  *** ISMG 4950 Grade Distribution Report ***");
      printf("\nNumber of A's                   %i", Acount);
      printf("\nNumber of B's                   %i", Bcount);
      printf("\nNumber of C's                   %i", Ccount);
      printf("\nNumber of D's                   %i", Dcount);
      printf("\nNumber of F's                   %i", Fcount);
      printf("\n\nPress any key to continue");
      fflush(stdin);
      junk=getchar();
      system("cls");
}

0
 
elwayisgodAuthor Commented:
Thanks for the help NBEKER...... Please help more. I will  reward you............
0
 
RONSLOWCommented:
What about my help ???

0
 
elwayisgodAuthor Commented:
ronslow,

I need someone to get this functional asap. i'm willing to pay whoever comes up with the complete solution. If your interested, email me at elwayisgod@hotmail.com.  we can talk seriously about it. Ive spent over 40 hrs on this and i'm stuck. If you solve i will pay. Simple as that.
0
 
RONSLOWCommented:
Is this the same problem as "Please answer tonight!!!!! I'm desparate. Calling a mulitdimensional array from a function" ?

If so see my response to that question.

you can always email me at Roger_Onslow@compsys.com.au if you want help outside Ex-Ex.

0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 6
  • 3
  • 3
  • +3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now