Uprzejmie proszę mój angielski.Gdzie jest logika błędna w moim kodzie?
Podejmuję kurs wprowadzający do C i mam pewne problemy z logiką mojego programu. To tylko czasami da wymaganą wydajność.
Zadanie polega na napisaniu funkcji pobierającej elementy tablicy, zwracającej największą parzystą cyfrę w elemencie.
int ary1[] = {123, 456, -7890, 12};
Zwróci -7890
jako największą wartość z 8
jako największą parzystą cyfrę i jej wystąpieniami.
int ary2[5] = {-123, 654, 78, 15, 189};
Zwróci 189
jako największą wartość z 8
jako największą parzystą cyfrą i jej wystąpieniami.
int ary3[2] = {9, 9};
Nie zwróci niczego.
int ary4[] = {123, 123, 0, 12};
Zwróciłby 123
jako największą wartość z 2
jako największą parzystą cyfrę i jej wystąpieniami.
int ary5[] = {24, 45, -789, 24, 1};
Zwróci -789
jako największą wartość z 8
jako największą parzystą cyfrą i jej wystąpieniami.
Zwróci 45
jako największą wartość z 4
jako największą parzystą cyfrą i jej wystąpieniami.
Oto mój kod:
#include <stdio.h>
void digitExtract(int[], int);
int main() {
int ary1[] = { 123, 456, -7890, 12 };
int ary2[5] = { -123, 654, 78, 15, 189 };
int ary3[2] = { 9, 9 };
int ary4[] = { 123, 123, 0, 12 };
int ary5[] = { 24, 45, -789, 24, 1 };
int ary6[] = { -749, -241, 1, 45 };
int ary7[] = { 1, 3, 5 };
printf("\nCalling function in ary1[]:\n");
digitExtract(ary1, 4);
printf("\nCalling function in ary2[]:\n");
digitExtract(ary2, 5);
printf("\nCalling function in ary3[]:\n");
digitExtract(ary3, 2);
printf("\nCalling function in ary4[]:\n");
digitExtract(ary4, 4);
printf("\nCalling function in ary5[]:\n");
digitExtract(ary5, 5);
printf("\nCalling function in ary6[]:\n");
digitExtract(ary6, 4);
printf("\nCalling function in ary7[]:\n");
digitExtract(ary7, 3);
}
void digitExtract(int Array[], int array_size) {
int tempValue;
int x;
int myArr[10] = { 0 };
int evenCount = 0;
int max = Array[0];
for (int i = 1; i < array_size; i++)
{
if (Array[i] < 0) {
Array[i] = -Array[i];
if (Array[i] > max) {
max = Array[i];
}
}
}
tempValue = (max < 0) ? -max : max;
do {
myArr[tempValue % 10]++;
tempValue /= 10;
} while (tempValue != 0);
for (x = 8; x > 0; x -= 2) {
if (myArr[x]>0) {
printf("Displaying from inside of function():\n");
printf("\nThe largest even digit: %d\n", x);
printf("\nThe digit %d occurs %d times.\n", x, myArr[x]);
evenCount++;
break;
}
} if (evenCount == 0)
printf("\nNo even digits found!\n\n");
}
wiem, że jest błąd w moim logiki jak ary2[]
będzie produkować nawet cyfrę 6
i jego wystąpienia, gdy powinna być 8
, ale nie wiem wiedzieć gdzie.
Funkcja działa dla tablicy, która ma wartości nieparzyste jako jej element.
Gdzie lub co robię źle?
Dziękuję.
Czy możesz wyjaśnić to pytanie nieco bardziej; W 'int ary6 [] = {-749, -241, 1, 45};', '-241' jest większy niż' -749', więc odpowiedź powinna wynosić '-241'? –
@ MattMcNabb - Musisz wziąć pod uwagę wartość bezwzględną, mówiąc o wielkości warunków. –
Kod implementuje algorytm: znajdź "największy" numer, a następnie znajdź największą parzystą cyfrę w tym numerze. Jednak przykłady odpowiadają: znajdź największą parzystą cyfrę, a następnie znajdź "największą" liczbę zawierającą tę cyfrę. Proszę wyjaśnić, które z tych podejść jest tym, co próbujesz zrobić! –