Algorithm Debugging C
1. **Problem:** Design a flowchart with a dual alternative decision structure that assigns 0 to the integer variable numberOne if the integer variable counter is less than 10. Otherwise, assign 77 to numberOne and print the value of numberOne in both cases.
2. **Formula/Logic:** Use an if-else decision structure:
$$\text{if } counter < 10 \text{ then } numberOne = 0 \text{ else } numberOne = 77$$
3. **Explanation:**
- Check the value of counter.
- If it is less than 10, assign 0 to numberOne.
- Otherwise, assign 77.
- Print numberOne.
4. **Pseudocode:**
```
if (counter < 10) {
numberOne = 0;
} else {
numberOne = 77;
}
print(numberOne);
```
---
1. **Problem:** Draw a structured flowchart or write structured pseudocode describing how to study for an exam including at least two decisions and two loops.
2. **Pseudocode:**
```
start
while (not exam_date) {
study_materials();
if (understand_topic == false) {
review_notes();
}
practice_questions();
if (time_to_take_break) {
take_break();
}
}
end
```
3. **Explanation:**
- Loop until the exam date.
- Study materials in each iteration.
- Decision 1: If topic not understood, review notes.
- Practice questions every loop.
- Decision 2: If time to take a break, then take a break.
---
1. **Problem:** Find the error in the pseudocode:
```
PRINT "Enter the length of the room : "
INPUT length
Declare lnteger length
```
2. **Error:** The variable declaration comes after input and has a typo: "lnteger" instead of "Integer".
3. **Correction:** Declare the variable before input and fix spelling:
```
Declare Integer length
PRINT "Enter the length of the room : "
INPUT length
```
---
1. **Problem:** Find the error in the code:
```
Declare Real lowest, highest, average
PRINT "Enter lowest, highest score: "
INPUT lowest
INPUT highest
Set average = low + high / 2
PRINT "The average is ", average
```
2. **Error:** Variables used in calculation are incorrect (low, high instead of lowest, highest) and operator precedence is wrong.
3. **Correction:** Use parentheses and correct variable names:
$$average = \frac{lowest + highest}{2}$$
4. **Corrected code:**
```
average = (lowest + highest) / 2
```
---
1. **Problem:** Design a flowchart and implement a C program to find the reverse of a number and check if it is a palindrome.
2. **Algorithm:**
- Input number.
- Copy number to temp.
- Initialize reverse = 0.
- While number != 0:
- remainder = number % 10
- number = number / 10
- reverse = reverse * 10 + remainder
- If temp == reverse, print palindrome message else not palindrome.
3. **Explanation:**
- Extract digits from the number one by one.
- Build the reverse number.
- Compare original and reversed number.
---
1. **Problem:** Write a program to compute product of even numbers entered until sentinel 99.
2. **Logic:**
- Initialize product = 1.
- Loop input number.
- If number == 99, break.
- If number is even, multiply product.
- Print product.
---
1. **Problem:** Rewrite while loop using for loop:
```
product = 1; i = 0;
while (i <= n) {
scanf("%d", &a);
if (a != i) product *= a;
++i;
}
```
2. **For loop:**
```
product = 1;
for (int i = 0; i <= n; i++) {
scanf("%d", &a);
if (a != i) product *= a;
}
```
---
1. **Problem:** Write a do-while loop that prompts input until value in 0 to 15 inclusive is entered, preventing infinite loop on wrong data type.
2. **Code snippet:**
```
int value;
do {
printf("Enter a value between 0 and 15: ");
if (scanf("%d", &value) != 1) {
while (getchar() != '\n'); // clear input buffer
value = -1; // invalid
}
} while (value < 0 || value > 15);
```
3. **Explanation:**
- Use scanf return to check input validity.
- Clear input buffer on invalid input.
- Repeat until valid input in range.