In: Computer Science
PRACTICAL 10 C PROGRAMMING.
Question 1 - Reading into a dynamic array.
Write a program called temperatures01 that reads a (non-empty) sequence maximum daily temperatures. Your program should first ask for the number of temperatures to read and dynamically allocate an array just big enough to hold the number of temperatures you read. You should then read in the elements of the array using a loop. You then should print out the elements of the array in reverse order (from most recent to oldest).
Test Cases
count temperatures output 3 15.0 17.0 19.5 19.5 17.0 15.0 5 16.5 18.8 20.5 21.3 16.2 16.2 21.3 20.5 18.8 16.5
Question 2- Dynamic odds-and-evens
Problem Definition
Write a program called odds_evens01 that reads a (non-empty) sequence of integers. As for question 1 above, your program should first ask for the number of integers to read and dynamically allocate an array just big enough to hold the number of values you read.
You should then read in the elements of the array using a loop. Then your program must dynamically allocate two arrays one to hold all the even numbers from the array you have just read and one to hold the odd numbers from the array. Your code must allocate just enough space to each of the arrays to hold the odd and the even numbers. For example, given the input:
3 4 5 6 9 1 2 8 2
ou must allocate an array of 4 values for the odd numbers and an array of 5 values for the even numbers. Your program must then print the values in the odd array and the even array.
Test Cases
Two test cases for the program are:
input output 3 4 5 6 9 1 2 9 3 5 9 1 9 4 6 2 1 1 1 2 2 3 8 1 1 1 3 2 2 8
Write two more test cases in a text file called: odds_evens01.txt and save it in the directory for this practical.
Coding
Implement the problem definition above in a file called odds_evens01.c. Compile your program with -Wall to help improve the quality of your code. Note, you will need to write a dedicated loop just to count the number of odd and even elements there are so you can allocate the arrays for these. Also note, you may find some code from your previous sessions helpful in writing this solution. Make sure you save your code into your week10practice folder.
Question 3 - A dynamically growing array
Problem Definition
This is based on your answer to question 1.
One problem with the solution to questions 1 and 2 of of this practical is that the user has to know, in advance, how many values they will enter so we can allocate an array of the right size. In some cases it is better for a program just to keep reading values until the user types in a finishing value such as: -100.0.
In this problem you are to save your code from question 1 to write a new program called temperatures02. Then modify the code to:
After you finish reading your array your program should, as before, output the temperatures read in reverse (most recent to oldest).
Test Cases
As before two test cases for your program would be:
count temperatures output 3 15.0 17.0 19.5 19.5 17.0 15.0 5 16.5 18.8 20.5 21.3 16.2 16.2 21.3 20.5 18.8 16.5
Coding
Implement the problem definition above in a file called temperatures02.c. Compile your program with -Wall to help improve the quality of your code. Make sure you save your code into your week10practice folder. Note: your loop to read values should be a while loop that terminates when you read the stopping value of -100.0. Inside your loop you will need to have a check to see if you have reached the end of the currently allocated array and have code to perform the new allocation, copying and deallocation. You might want to write a small program to implement and test the logic for allocation, copying and deallocation so that you are confident that you have the process working before integrating it into your solution.
Question 1:
#include <stdio.h>
int main()
{
int number;
printf("Enter size of the array : ");
scanf("%d", &number); //accept an integer from user
float arr[number];
for(int i=0;i<number;i++){
float temp;
printf("Enter number : ");
scanf("%f", &temp); //accept array elements integer from
user
arr[i]=temp;
}
for (int i=number-1;i>=0;i--){
printf("%.1f ",arr[i]);
}
return 0;
}
------------------------------------------------------------------------------
Question 2
#include <stdio.h>
int main()
{
int number;
printf("Enter size of the array : ");
scanf("%d", &number); //accept an integer from user
int arr[number];
int odd_cnt= 0 ; // to keep track of how many odd integers are
there
int even_cnt = 0; //to keep track of how many even integers are
there
for(int i=0;i<number;i++){
int temp;
printf("Enter number : ");
scanf("%d", &temp); //accept array elements integer from
user
if(temp %2 ==0){
even_cnt++;
}else{
odd_cnt++;
}
arr[i]=temp;
}
int odd[odd_cnt];
int even[even_cnt];
int i_odd = 0;
int i_even = 0;
for(int i=0;i<number;i++){
if(arr[i]%2 == 0){
even[i_even]=arr[i];
i_even++;
}else{
odd[i_odd]=arr[i];
i_odd++;
}
}
for(int i=0;i<odd_cnt;i++){
printf("%d ",odd[i]);
}
printf("\t");
for(int i=0;i<even_cnt;i++){
printf("%d ",even[i]);
}
return 0;
}
-------------------------------------------------------------------------
Question 3:
#include <stdio.h>
void printArray(double *array, int size){ //printing array in
reverse order
for(int i=size-1; i>=0; i--){
printf("%.1lf ", array[i]);
}
putchar('\n');
}
int main(void){
int size = 5; //initializing size to 5
double *array = malloc(size * sizeof(double));
double temperature;
int i = 0;
while(1){
if(temperature == -100.0) //if input is -100 then get out of the
loop
break;
if(i == size){
size *= 2;
array = realloc(array, size * sizeof(double)); //if size is greater
than capacity then increase the size to double
}
printf("Enter number : ");
scanf("%lf", &temperature);
array[i] = temperature;
i++;
}
printArray(array, i);
free(array);
return 0;
}