added weekly exercises of isp-ws25
This commit is contained in:
79
c/isp-ws25/weeklies/week08/w08ex03.c
Executable file
79
c/isp-ws25/weeklies/week08/w08ex03.c
Executable file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
This program manages a list of product prices.
|
||||
The user can enter a product price and then decide,
|
||||
whether to continue or to to stop adding new product prices.
|
||||
After adding product prices, the average price is calculated and printed.
|
||||
|
||||
Unfortunately, there are some errors in the code.
|
||||
The compiler finds a few of them, others are logical
|
||||
errors and are not detected by the compiler.
|
||||
|
||||
This is an example:
|
||||
|
||||
Price for product 1: 6.50
|
||||
Add another price? (1 = yes, 0 = no): 1
|
||||
Price for product 2: 2.80
|
||||
Add another price? (1 = yes, 0 = no): 1
|
||||
Price for product 3: 9.90
|
||||
Add another price? (1 = yes, 0 = no): 1
|
||||
Price for product 4: 450
|
||||
Add another price? (1 = yes, 0 = no): 0
|
||||
Average price: 117.30
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void addPrice(float** prices, int* count, int* capacity)
|
||||
{
|
||||
if (*count >= *capacity)
|
||||
{
|
||||
*capacity *= 2;
|
||||
float *new_prices = realloc(*prices, *capacity * sizeof(float));
|
||||
if (new_prices == NULL)
|
||||
{
|
||||
printf("Memory allocation failed\n");
|
||||
return;
|
||||
}
|
||||
*prices = new_prices;
|
||||
}
|
||||
|
||||
printf("Price for product %d: ", *count + 1);
|
||||
scanf("%f", &(*prices)[*count]);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int capacity = 2;
|
||||
int count = 0;
|
||||
float* prices = (float*) calloc(capacity, sizeof(float));
|
||||
if (prices == NULL)
|
||||
{
|
||||
printf("Memory allocation failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int additional_price = 0;
|
||||
do
|
||||
{
|
||||
addPrice(&prices, &count, &capacity);
|
||||
count++;
|
||||
if (prices == NULL)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Add another price? (1 = yes, 0 = no): ");
|
||||
scanf("%d", &additional_price);
|
||||
} while (additional_price);
|
||||
|
||||
float total = 0;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
total += prices[i];
|
||||
}
|
||||
printf("Average price: %.2f\n", total / count);
|
||||
|
||||
free(prices);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user