Cześć. Mam problem, aby mój program przeszedł pomyślnie wszystkie testy maszynowe. Miałem za zadanie napisać program następującej treści:
Napisz funkcję liczącą wielkie litery, małe litery oraz spacje w tekście. Wyniki (trzy wartości typu całkowitego) powinny być zwracane przez funkcję poprzez wskaźniki do zmiennych docelowych, przekazywanych w liście parametrów wywołania funkcji. Prototyp funkcji powinien wyglądać następująco:
int marks_counter(const char* text, int* uppercase, int* lowercase, int* whitespace);
Parametry:
text - wskaźnik na tablicę typu char,
uppercase, lowercase - wskaźniki na zmienne typu int, do których ma zostać zapisana liczba znalezionych dużych i małych znaków, odnalezionych w tekście text,
whitespace - wskaźnik na zmienną typu int, do której ma zostać zapisana liczba znalezionych białych znaków.
Wartość zwrócona:
1 - gdy obliczenia zakończyły się sukcesem,
-1 - w przypadku, kiedy jest problem z parametrem text,
-2 - w przypadku, wystąpienia problemów z pozostałymi parametrami.
Napisz program, który przetestuje przygotowaną przez Ciebie funkcję na następującym tekście:
const char* t1 = "Ala Ma Kota a kot Ma AlE";
Program powinien wyświetlić w jednej linii, oddzielone spacjami, liczbę wielkich i małych liter oraz białych znaków.
Uwaga! W programie nie wolno używać operatora [].
Mój kompletny kod programu, który działa poprawnie:
#include <stdio.h>
#include <stdlib.h>
int marks_counter(const char* text, int* uppercase, int* lowercase, int* whitespace);
int main()
{
const char* t1 = "Ala Ma Kota a kot Ma AlE";
int uppercase = 0;
int *p_uppercase = &uppercase;
int lowercase = 0;
int *p_lowercase = &lowercase;
int whitespace = 0;
int *p_whitespace = &whitespace;
marks_counter(t1, p_uppercase, p_lowercase, p_whitespace);
return 0;
}
int marks_counter(const char* text, int* uppercase, int* lowercase, int* whitespace){
int low = 0;
int up = 0;
int wh = 0;
if (text == NULL)
{
return -1;
}
if (uppercase == NULL || lowercase == NULL || whitespace == NULL)
{
return -2;
}
else{
while (*text != '\0') {
if (*text >= 'a' && *text <= 'z'){
low++;
*lowercase = low;
}
if (*text >= 'A' && *text <= 'Z'){
up++;
*uppercase = up;
}
if (*text == ' '){
wh++;
*whitespace = wh;
}
(text++);
}
printf("%d %d %d", *uppercase, *lowercase, *whitespace);
return 1;
}
}
I tutaj pojawia się właśnie problem, bowiem program nie przechodzi trzech ostatnich testów maszynowych. Dlaczego? Coś sknociłem z warunkami zabezpieczającymi funkcję?
Poniżej wyniki testów:
TEST [1]: Sprawdzanie czy funkcja zwraca poprawną wartosc⏎
Wywołanie: marks_counter(test_array, &l_odp_array[0], &l_odp_array[1], &l_odp_array[2]) == 1⏎
3 47 7Wartość zwrócona: 1; oczekiwana: 1. Wynik: SUKCES⏎
⏎
TEST [2]: Sprawdzanie czy funkcja zwraca poprawną ilosc duzych liter⏎
Wywołanie: test_is_equal(odp_array[0], l_odp_array[0]) == 1⏎
Wartość zwrócona: 1; oczekiwana: 1. Wynik: SUKCES⏎
⏎
TEST [3]: Sprawdzanie czy funkcja zwraca poprawną ilosc malych liter⏎
Wywołanie: test_is_equal(odp_array[1], l_odp_array[1]) == 1⏎
Wartość zwrócona: 1; oczekiwana: 1. Wynik: SUKCES⏎
⏎
TEST [4]: Sprawdzanie czy funkcja zwraca poprawną ilosc spacji⏎
Wywołanie: test_is_equal(odp_array[2], l_odp_array[2]) == 1⏎
Wartość zwrócona: 1; oczekiwana: 1. Wynik: SUKCES⏎
⏎
TEST [5]: Sprawdzanie czy funkcja zwraca poprawną wartosc⏎
Wywołanie: marks_counter(e_char_array, &l_odp_array[0], &l_odp_array[1], &l_odp_array[2]) == -1⏎
Wartość zwrócona: -1; oczekiwana: -1. Wynik: SUKCES⏎
⏎
TEST [6]: Sprawdzanie czy funkcja zwraca poprawną wartosc⏎
Wywołanie: marks_counter(test_array, e_array, &l_odp_array[1], &l_odp_array[2]) == -2⏎
Wartość zwrócona: -2; oczekiwana: -2. Wynik: SUKCES⏎
⏎
TEST [7]: Sprawdzanie czy funkcja zwraca poprawną wartosc⏎
Wywołanie: marks_counter(test_array, &l_odp_array[1], e_array, &l_odp_array[2]) == -2⏎
Wartość zwrócona: -2; oczekiwana: -2. Wynik: SUKCES⏎
⏎
TEST [8]: Sprawdzanie czy funkcja zwraca poprawną wartosc⏎
Wywołanie: marks_counter(test_array, &l_odp_array[1], &l_odp_array[1], e_array) == -2⏎
Wartość zwrócona: -2; oczekiwana: -2. Wynik: SUKCES⏎
⏎
TEST [9]: Sprawdzanie czy funkcja zwraca poprawną wartosc⏎
Wywołanie: marks_counter(nope, &l_odp_array[0], &l_odp_array[1], &l_odp_array[2]) == 1⏎
3 47 7Wartość zwrócona: 1; oczekiwana: 1. Wynik: SUKCES⏎
⏎
TEST [10]: Sprawdzanie czy funkcja zwraca poprawną ilosc duzych liter⏎
Wywołanie: test_is_equal(l_odp_array[0], 0) == 1⏎
Wartość zwrócona: 0; oczekiwana: 1. Wynik: PORAŻKA⏎
⏎
TEST [11]: Sprawdzanie czy funkcja zwraca poprawną ilosc malych liter⏎
Wywołanie: test_is_equal(l_odp_array[1], 0) == 1⏎
Wartość zwrócona: 0; oczekiwana: 1. Wynik: PORAŻKA⏎
⏎
TEST [12]: Sprawdzanie czy funkcja zwraca poprawną ilosc spacji⏎
Wywołanie: test_is_equal(l_odp_array[2], 0) == 1⏎
Wartość zwrócona: 0; oczekiwana: 1. Wynik: PORAŻKA⏎