//*PLEASE ANSWER AS QUICKLY AS POSSIBLE* //This is my intro to c programming cla
ID: 3720480 • Letter: #
Question
//*PLEASE ANSWER AS QUICKLY AS POSSIBLE*
//This is my intro to c programming class, instructions & problems below
#include
#include
#include
#include
/*HELPER CODE YOU DO NOT NEED TO CHANGE ANY OF THIS */
typedef struct {
char * pNames;
int iPhoneNum;
}PhoneEntries;
struct Node{
int phone;
struct Node *pNext;
};
typedef struct Node node;
node * createnode(node *pNode, int num)
{
pNode = (node*)malloc(1*sizeof(node));
pNode->pNext = 0;
pNode->phone = num;
return pNode;
}
node* addnodetostart(node *pRoot, int num)
{
node *pTemp;
pTemp = (node*)malloc(1*sizeof(node));
pTemp->phone = num;
pTemp->pNext = pRoot;
return pTemp;
}
void deletelist(node *pRoot)
{
while(pRoot!=0)
{
node * pTemp = pRoot;
pRoot = pTemp->pNext;
free(pTemp);
}
}
int binary(unsigned char num)
{
if (num == 0)
{
return 0;
}
else
{
return (num % 2) + 10 * binary(num / 2);
}
}
/*END HELPER CODE */
/*FUNCTIONS YOU HAVE TO WRITE. YOU MAY USE THE DEBUGGER AND THE MAN COMMAND. OTHERWISE CLOSED BOOK CLOSED NOTES */
/*WRITE A FUNCTION THAT COMPARES TWO STRINGS USING POINTER NOTATION. IT SHOULD RETURN AN INT. IF THE TWO STRINGS ARE THE SAME RETURN ZERO, OTHERWISE RETURN 1 or -1 BASED ON IF A COMES BEFORE B IN ALPHABETICAL ORDER(ie return the same thing that strcmp does) */
int comparestrings(const char * str1, const char *str2)
{
return 0;
}
/*WRITE A FUNCTION THAT SETS THE I-TH BIT OF A CHAR TO THE GIVEN VALUE*/
void setbit(unsigned char byte, int i, bool oneorzero)
{
}
/*WRITE A FUNCTION THAT PRINTS OUT THE CONTENTS OF A LINKED LIST, GIVEN THE ROOT NODE */
void printlist(node * pNode)
{
}
/*WRITE A COMPARE FUNCTION FOR PHONEBOOK FOR QSORT. YOU MAY USE YOUR PREVIOUSLY WRITTEN COMPARESTRINGS FUNCTION. IF YOU WERE UNABLE TO WRITE THIS YOU MAY YOU STRCMP */
int compare(const void * a, const void *b)
{
}
/*WRITE A FUNCTION THAT MALLOCS 1 PHONE BOOK, INITALIZES IT WITH A DEEP COPY OF THE GIVEN STRING, THEN REALLOCS TO 10 PHONE BOOKS, SETTING EACH OF THEM TO THE SAME DEFAULT NAME. YOU MAY USE STRCPY*/
PhoneEntries * initbook(char * defaultstring)
{
PhoneEntries * pBook;
int i = 0;
/*UNCOMMENT THIS CODE OUT AFTER YOU FINISH. IT SHOULD PRINT OUT TEST NAME TEN TIMES.
for( i =0; i < 10; i++)
printf("Phone entries %s ", pBook[i].pNames);*/
return pBook;
}
/*WRITE A FUNCTION THAT FREES THE PHONEBOOKS FROM THE PREVIOUS PROBLEM */
void freebooks(PhoneEntries* pBook)
{
}
/*WRITE A RECURISVE FUNCTION TO SEE IF A GIVEN NUMBER APPEARS IN A SORTED LIST OF INTEGERS. YOU WILL WANT TO SPLIT THE LIST INTO EQUAL TWO PARTS AND RECURE */
bool recursivesearch( int * array, int startofarray, int endofarray, int numbtosearchfor)
{
return false;
}
/*END FUNCTIONS YOU HAVE TO WRITE */
int main()
{
/*YOU DO NOT HAVE TO CHANGE THIS CODE */
int array[] = {1 ,2, 2, 3, 4, 5, 6 ,6, 7, 9, 10, 12};
char bitchange = 'H';
char str1[] = "Sloths are great"; /*Correct opinion */
char str2[] = "Sloths are not great";
int i = 0;
PhoneEntries *pPhoneBook;
PhoneEntries *pPhoneBook2;
node * pRoot;
printf("STRING COMPARE PROBLEM ");
if(!comparestrings(str1,str2))
printf("STRINGS ARE EQUAL, THIS IS A BUG ");
else
printf("STRINGS ARE NOT EQUAL ");
printf("BIT FLIP PROBLEM ");
printf("Bits before change %d ", binary(bitchange));
setbit(bitchange,1,1);
setbit(bitchange,3,0);
printf("Bits after change %d , should be 1000010 ", binary(bitchange));
pRoot = createnode(pRoot,50);
pRoot = addnodetostart(pRoot, 100);
pRoot = addnodetostart(pRoot, 160);
pRoot = addnodetostart(pRoot, 260);
printf("LINKED LIST PROBLEM ");
printlist(pRoot);
deletelist(pRoot);
pPhoneBook = (PhoneEntries*)malloc(sizeof(PhoneEntries)*5);
pPhoneBook[0].pNames = (char*)malloc(sizeof(char)*20);
pPhoneBook[1].pNames = (char*)malloc(sizeof(char)*20);
pPhoneBook[2].pNames = (char*)malloc(sizeof(char)*20);
pPhoneBook[3].pNames = (char*)malloc(sizeof(char)*20);
pPhoneBook[4].pNames = (char*)malloc(sizeof(char)*20);
strcpy(pPhoneBook[0].pNames,"Ants");
pPhoneBook[0].iPhoneNum = 100;
strcpy(pPhoneBook[1].pNames,"Python");
pPhoneBook[1].iPhoneNum = 200;
strcpy(pPhoneBook[2].pNames,"Aardvark");
pPhoneBook[2].iPhoneNum = 300;
strcpy(pPhoneBook[3].pNames,"Penguin");
pPhoneBook[3].iPhoneNum = 400;
strcpy(pPhoneBook[4].pNames,"Cats");
pPhoneBook[4].iPhoneNum = 500;
printf("PHONE BOOK PROBLEM ");
printf("Sorted phone book ");
qsort(pPhoneBook,5,sizeof(pPhoneBook),compare);
for(i=0; i < 5; i++)
{
printf("Name %s ", pPhoneBook[i].pNames);
printf("Phone %d ", pPhoneBook[i].iPhoneNum);
free(pPhoneBook[i].pNames);
}
free(pPhoneBook);
printf("RECURSIVE SORT PROBLEM ");
if(recursivesearch(array,0,12,3)==true)
printf("Three appeared in the array! This is the correct result! ");
else
printf("Three did not appear in the array. Since its there, this is a bug ");
printf("MEMORY ALLOCATION PROBLEM ");
pPhoneBook2 = initbook("TEST NAME");
freebooks(pPhoneBook2);
/* END OF PROVIDED CODE THAT YOU DO NOT HAVE TO CHANGE*/
return 0;
}
Explanation / Answer
//*PLEASE ANSWER AS QUICKLY AS POSSIBLE*
//This is my intro to c programming class, instructions & problems below
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
/*HELPER CODE YOU DO NOT NEED TO CHANGE ANY OF THIS */
typedef struct {
char * pNames;
int iPhoneNum;
}PhoneEntries;
struct Node {
int phone;
struct Node *pNext;
};
typedef struct Node node;
node * createnode(node *pNode, int num)
{
pNode = (node*)malloc(1 * sizeof(node));
pNode->pNext = 0;
pNode->phone = num;
return pNode;
}
node* addnodetostart(node *pRoot, int num)
{
node *pTemp;
pTemp = (node*)malloc(1 * sizeof(node));
pTemp->phone = num;
pTemp->pNext = pRoot;
return pTemp;
}
void deletelist(node *pRoot)
{
while (pRoot != 0)
{
node * pTemp = pRoot;
pRoot = pTemp->pNext;
free(pTemp);
}
}
int binary(unsigned char num)
{
if (num == 0)
{
return 0;
}
else
{
return (num % 2) + 10 * binary(num / 2);
}
}
/*END HELPER CODE */
/*FUNCTIONS YOU HAVE TO WRITE. YOU MAY USE THE DEBUGGER AND THE MAN COMMAND. OTHERWISE CLOSED BOOK CLOSED NOTES */
/*WRITE A FUNCTION THAT COMPARES TWO STRINGS USING POINTER NOTATION. IT SHOULD RETURN AN INT.
IF THE TWO STRINGS ARE THE SAME RETURN ZERO, OTHERWISE RETURN 1 or -1 BASED ON IF A COMES BEFORE B IN ALPHABETICAL ORDER
(ie return the same thing that strcmp does) */
int comparestrings(const char * str1, const char *str2)
{
int i=0,j=0;
while (str1[i] !='' && str2[j] != '')
{
if (str1[i] < str2[i])
return 1;
else if (str1[i] > str2[i])
return -1;
i++; j++;
}
if (str1[i] != '')
return -1;
else if (str2[j] != '')
return 1;
else
return 0;
}
/*WRITE A FUNCTION THAT SETS THE I-TH BIT OF A CHAR TO THE GIVEN VALUE*/
unsigned char setbit(unsigned char byte, int i, bool oneorzero)
{
i = i - 1;
if(oneorzero)
byte = (1 << i) | byte;
else
byte = (254 << i) & byte;
return byte;
}
/*WRITE A FUNCTION THAT PRINTS OUT THE CONTENTS OF A LINKED LIST, GIVEN THE ROOT NODE */
void printlist(node * pNode)
{
node *curr = pNode;
while (curr != NULL)
{
printf("%d ", curr->phone);
curr = curr->pNext;
}
}
/*WRITE A COMPARE FUNCTION FOR PHONEBOOK FOR QSORT. YOU MAY USE YOUR PREVIOUSLY WRITTEN COMPARESTRINGS FUNCTION.
IF YOU WERE UNABLE TO WRITE THIS YOU MAY YOU STRCMP */
int compare(const void * a, const void *b)
{
return strcmp(a, b);
}
/*WRITE A FUNCTION THAT MALLOCS 1 PHONE BOOK, INITALIZES IT WITH A DEEP COPY OF THE GIVEN STRING,
THEN REALLOCS TO 10 PHONE BOOKS, SETTING EACH OF THEM TO THE SAME DEFAULT NAME. YOU MAY USE STRCPY*/
PhoneEntries * initbook(char * defaultstring)
{
PhoneEntries * pBook = (PhoneEntries*)malloc(sizeof(PhoneEntries)*1);
pBook->pNames = defaultstring;
pBook = (PhoneEntries *)realloc(pBook, sizeof(PhoneEntries) * 10);
int i = 0;
for (i = 0; i < 10; i++)
pBook[i].pNames = defaultstring;
/*UNCOMMENT THIS CODE OUT AFTER YOU FINISH. IT SHOULD PRINT OUT TEST NAME TEN TIMES.*/
for( i =0; i < 10; i++)
printf("Phone entries %s ", pBook[i].pNames);
return pBook;
}
/*WRITE A FUNCTION THAT FREES THE PHONEBOOKS FROM THE PREVIOUS PROBLEM */
void freebooks(PhoneEntries* pBook)
{
free(pBook);
}
/*WRITE A RECURISVE FUNCTION TO SEE IF A GIVEN NUMBER APPEARS IN A SORTED LIST OF INTEGERS.
YOU WILL WANT TO SPLIT THE LIST INTO EQUAL TWO PARTS AND RECURE */
bool recursivesearch(int * array, int startofarray, int endofarray, int numbtosearchfor)
{
for (int i = startofarray; i <= endofarray; i++)
{
if (array[i] == numbtosearchfor)
return true;
}
return false;
}
/*END FUNCTIONS YOU HAVE TO WRITE */
int main()
{
/*YOU DO NOT HAVE TO CHANGE THIS CODE */
int array[] = { 1 ,2, 2, 3, 4, 5, 6 ,6, 7, 9, 10, 12 };
char bitchange = 'H';
char str1[] = "Sloths are great"; /*Correct opinion */
char str2[] = "Sloths are not great";
int i = 0;
PhoneEntries *pPhoneBook;
PhoneEntries *pPhoneBook2;
node * pRoot=NULL;
printf("STRING COMPARE PROBLEM ");
if (!comparestrings(str1, str2))
printf("STRINGS ARE EQUAL, THIS IS A BUG ");
else
printf("STRINGS ARE NOT EQUAL ");
printf("BIT FLIP PROBLEM ");
printf("Bits before change %d ", binary(bitchange));
bitchange = setbit(bitchange, 1, 1);
bitchange = setbit(bitchange, 3, 0);
printf("Bits after change %d , should be 1000010 ", binary(bitchange));
pRoot = createnode(pRoot, 50);
pRoot = addnodetostart(pRoot, 100);
pRoot = addnodetostart(pRoot, 160);
pRoot = addnodetostart(pRoot, 260);
printf("LINKED LIST PROBLEM ");
printlist(pRoot);
deletelist(pRoot);
pPhoneBook = (PhoneEntries*)malloc(sizeof(PhoneEntries) * 5);
pPhoneBook[0].pNames = (char*)malloc(sizeof(char) * 20);
pPhoneBook[1].pNames = (char*)malloc(sizeof(char) * 20);
pPhoneBook[2].pNames = (char*)malloc(sizeof(char) * 20);
pPhoneBook[3].pNames = (char*)malloc(sizeof(char) * 20);
pPhoneBook[4].pNames = (char*)malloc(sizeof(char) * 20);
strcpy(pPhoneBook[0].pNames, "Ants");
pPhoneBook[0].iPhoneNum = 100;
strcpy(pPhoneBook[1].pNames, "Python");
pPhoneBook[1].iPhoneNum = 200;
strcpy(pPhoneBook[2].pNames, "Aardvark");
pPhoneBook[2].iPhoneNum = 300;
strcpy(pPhoneBook[3].pNames, "Penguin");
pPhoneBook[3].iPhoneNum = 400;
strcpy(pPhoneBook[4].pNames, "Cats");
pPhoneBook[4].iPhoneNum = 500;
printf("PHONE BOOK PROBLEM ");
printf("Sorted phone book ");
qsort(pPhoneBook, 5, sizeof(pPhoneBook), compare);
for (i = 0; i < 5; i++)
{
printf("Name %s ", pPhoneBook[i].pNames);
printf("Phone %d ", pPhoneBook[i].iPhoneNum);
free(pPhoneBook[i].pNames);
}
free(pPhoneBook);
printf("RECURSIVE SORT PROBLEM ");
if (recursivesearch(array, 0, 12, 3) == true)
printf("Three appeared in the array! This is the correct result! ");
else
printf("Three did not appear in the array. Since its there, this is a bug ");
printf("MEMORY ALLOCATION PROBLEM ");
pPhoneBook2 = initbook("TEST NAME");
freebooks(pPhoneBook2);
/* END OF PROVIDED CODE THAT YOU DO NOT HAVE TO CHANGE*/
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.