Compare commits

...

4 Commits

Author SHA1 Message Date
775fb3ca9d add lab sheet 2023-10-26 20:28:22 +01:00
bded0f3a6a update readme 2023-10-26 20:25:47 +01:00
dd75cd75e7 complete c21 2023-10-26 20:24:04 +01:00
3640e0ed6a complete c20 2023-10-26 20:23:46 +01:00
5 changed files with 193 additions and 0 deletions

125
Exercises/C20/ex1.c Normal file
View File

@@ -0,0 +1,125 @@
// Modified from C18 Ex5
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define DEBUG_MAIN
#define DEBUG_FNS
float degrees_to_radians(float degrees) {
#ifdef DEBUG_FNS
printf("degrees_to_radians(degrees=%f): called\n", degrees);
#endif
return M_PI * degrees / 180.0;
}
// Simple function to populate an integer array
void PopulateTheArray ( int Size, float ArrayData[])
{
#ifdef DEBUG_FNS
printf("PopulateTheArray(Size=%d, ArrayData): called\n", Size);
#endif
int i; // Variable to use in our loop
for ( i = 0 ; i < Size ; i++)
{
ArrayData[i] = degrees_to_radians(i); // Treat it like a normal array
}
}
// Simple function do display contents an integer array
void DisplayTheArray ( int Size, float ArrayData[])
{
#ifdef DEBUG_FNS
printf("DisplayTheArray(Size=%d, ArrayData): called\n", Size);
#endif
int i; // Variable to use in our loop
for ( i = 0 ; i < Size ; i++)
{
#ifdef DEBUG_FNS
printf("DisplayTheArray(): i=%d\n", i);
#endif
printf ("%d\t%0.3f\n", i, ArrayData[i]);
}
}
int SaveArrayBinary (char *filename, int Size, float ArrayData[])
{
#ifdef DEBUG_FNS
printf("DisplayTheArray(filename=%s, Size=%d, ArrayData): called\n", filename, Size);
#endif
FILE *fp; // File Pointer
int i; // Variable to use in our loop
fp = fopen(filename, "wb");
#ifdef DEBUG_FNS
printf("DisplayTheArray(): fp=%p\n", fp);
#endif
// if file open failed, return error to caller
if (fp == NULL) {
return 1;
}
// write data
fwrite(ArrayData, sizeof(float), Size, fp);
// close file, returns 0 on successful closing (therefore function has executed sucessfully)
return fclose(fp);
}
// Main () - execution starts here
int main (void)
{
#ifdef DEBUG_MAIN
printf("main(): called\n");
#endif
char filename[2049];
int rc, iSizeForArray;
float *pData; // A pointer to hold the base address of out array
// Ask for the size of the array and store result
printf("Please enter the size of the array to dynamically allocate: ");
scanf ("%d", &iSizeForArray);
#ifdef DEBUG_MAIN
printf("main(): iSizeForArray=%d\n", iSizeForArray);
#endif
// Use calloc with checking
pData = calloc( iSizeForArray, sizeof (float));
#ifdef DEBUG_MAIN
printf("main(): pData=%p\n", pData);
#endif
// Check we got the memory
if ( pData == NULL)
{
printf ("Sorry, I could not allocate the memory, bye!\n");
return -1;
}
// Pass the size, iSizeForArray) and the pointer created
// which points to the start of the sucesfully allocated memory
PopulateTheArray(iSizeForArray, pData);
DisplayTheArray(iSizeForArray, pData);
// Exercise doesn't ask to use function but kind of pointless without
printf("Enter filename: ");
scanf("%2048s", filename);
#ifdef DEBUG_MAIN
printf("main(): filename=%s\n", filename);
#endif
rc = SaveArrayBinary(filename, iSizeForArray, pData);
#ifdef DEBUG_MAIN
printf("main(): rc=%d\n", rc);
#endif
if (rc != 0) {
printf("Error saving file\n");
free(pData);
return rc;
}
free(pData); // Free up the memory before exiting
return (0); // Exit indicating sucess
}

20
Exercises/C21/ex1.c Normal file
View File

@@ -0,0 +1,20 @@
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
int age;
char name[10];
if ( argc != 3 )
{
printf ("USAGE: %s name age\n",argv[0]);
exit (0);
}
sscanf(argv[1],"%s",name);
sscanf(argv[2],"%d",&age);
printf ("age=%d name=%s\n", age, name);
return 0;
}

44
Exercises/C21/ex2.c Normal file
View File

@@ -0,0 +1,44 @@
// Modified from C10 Ex5
#include <stdlib.h>
#include <stdio.h>
int date_to_day(int year, int month, int day) {
if (month < 3) {
month += 12;
year -= 1;
}
return ((13*month+3)/5 + day + year + year/4 - year/100 + year/400) % 7;
}
void print_day_of_week(int day) {
switch (day) {
case 0: printf("Monday\n"); break;
case 1: printf("Tuesday\n"); break;
case 2: printf("Wednesday\n"); break;
case 3: printf("Thursday\n"); break;
case 4: printf("Friday\n"); break;
case 5: printf("Saturday\n"); break;
case 6: printf("Sunday\n"); break;
}
}
int main(int argc, char *argv[]) {
int rc, year, month, day, nd;
if ( argc != 4 )
{
printf ("USAGE: %s year month day\n",argv[0]);
exit (0);
}
sscanf(argv[1],"%d",&year);
sscanf(argv[2],"%d",&month);
sscanf(argv[3],"%d",&day);
nd = date_to_day(year, month, day);
print_day_of_week(nd);
return 0;
}

Binary file not shown.

View File

@@ -1,7 +1,11 @@
> Forked from <https://github.com/louisepb/VSMechatronics>.
# VSMechatronics # VSMechatronics
Completed C exercises can be found in the [Exercise](./Exercises) folder. Completed C exercises can be found in the [Exercise](./Exercises) folder.
Exercises can be found in [Laboratory_Sheets_by_Chapter.pdf](./Laboratory_Sheets_by_Chapter.pdf).
VSCode users will need to move exercise files into their own folder to use the build tools. VSCode users will need to move exercise files into their own folder to use the build tools.
Otherwise compile with: Otherwise compile with: