#include <stdio.h>
// chamar função com array de 0 elementos é Comportamento Não Definido
int analisa(int *v, size_t n) {
if (n == 1) return 2; // um array com um elemento é "constante"
int tmp = analisa(v, n - 1); // analisa array mais pequeno recursivamente
switch (tmp) {
case 0: // array mais pequeno desordenado
return 0;
break;
case 1: // array mais pequeno crescente
if (v[n - 2] > v[n - 1]) return 0; // desordenado
return 1;
break;
case 2: // array mais pequeno constante
if (v[n - 2] < v[n - 1]) return 1; // crescente
if (v[n - 2] > v[n - 1]) return 3; // decrescente
return 2;
break;
case 3: // array mais pequeno decrescente
if (v[n - 2] < v[n - 1]) return 0; // desordenado
return 3;
break;
default: // erro
return -1; // erro
break;
}
}
int main(void) {
const char *pt[] = {"desordenado", "crescente", "constante", "decrescente"};
int v[] = {1, 1, 1, 2, 3, 4};
int w[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int x[] = {1, 1, 1, 0, 0, 0, -1, -1};
int y[] = {1, 0, 1, 0, 1};
int z[] = {1};
printf("v da %s.\n", pt
[analisa
(v
, sizeof v
/ sizeof *v
)]); printf("w da %s.\n", pt
[analisa
(w
, sizeof w
/ sizeof *w
)]); printf("x da %s.\n", pt
[analisa
(x
, sizeof x
/ sizeof *x
)]); printf("y da %s.\n", pt
[analisa
(y
, sizeof y
/ sizeof *y
)]); printf("z da %s.\n", pt
[analisa
(z
, sizeof z
/ sizeof *z
)]); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBjaGFtYXIgZnVuw6fDo28gY29tIGFycmF5IGRlIDAgZWxlbWVudG9zIMOpIENvbXBvcnRhbWVudG8gTsOjbyBEZWZpbmlkbwppbnQgYW5hbGlzYShpbnQgKnYsIHNpemVfdCBuKSB7CiAgICBpZiAobiA9PSAxKSByZXR1cm4gMjsgLy8gdW0gYXJyYXkgY29tIHVtIGVsZW1lbnRvIMOpICJjb25zdGFudGUiCiAgICBpbnQgdG1wID0gYW5hbGlzYSh2LCBuIC0gMSk7IC8vIGFuYWxpc2EgYXJyYXkgbWFpcyBwZXF1ZW5vIHJlY3Vyc2l2YW1lbnRlCiAgICBzd2l0Y2ggKHRtcCkgewogICAgICAgIGNhc2UgMDogLy8gYXJyYXkgbWFpcyBwZXF1ZW5vIGRlc29yZGVuYWRvCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6IC8vIGFycmF5IG1haXMgcGVxdWVubyBjcmVzY2VudGUKICAgICAgICAgICAgaWYgKHZbbiAtIDJdID4gdltuIC0gMV0pIHJldHVybiAwOyAvLyBkZXNvcmRlbmFkbwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOiAvLyBhcnJheSBtYWlzIHBlcXVlbm8gY29uc3RhbnRlCiAgICAgICAgICAgIGlmICh2W24gLSAyXSA8IHZbbiAtIDFdKSByZXR1cm4gMTsgLy8gY3Jlc2NlbnRlCiAgICAgICAgICAgIGlmICh2W24gLSAyXSA+IHZbbiAtIDFdKSByZXR1cm4gMzsgLy8gZGVjcmVzY2VudGUKICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzogLy8gYXJyYXkgbWFpcyBwZXF1ZW5vIGRlY3Jlc2NlbnRlCiAgICAgICAgICAgIGlmICh2W24gLSAyXSA8IHZbbiAtIDFdKSByZXR1cm4gMDsgLy8gZGVzb3JkZW5hZG8KICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6IC8vIGVycm8KICAgICAgICAgICAgcmV0dXJuIC0xOyAvLyBlcnJvCiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9CgppbnQgbWFpbih2b2lkKSB7CiAgICBjb25zdCBjaGFyICpwdFtdID0geyJkZXNvcmRlbmFkbyIsICJjcmVzY2VudGUiLCAiY29uc3RhbnRlIiwgImRlY3Jlc2NlbnRlIn07CgogICAgaW50IHZbXSA9IHsxLCAxLCAxLCAyLCAzLCA0fTsKICAgIGludCB3W10gPSB7MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMX07CiAgICBpbnQgeFtdID0gezEsIDEsIDEsIDAsIDAsIDAsIC0xLCAtMX07CiAgICBpbnQgeVtdID0gezEsIDAsIDEsIDAsIDF9OwogICAgaW50IHpbXSA9IHsxfTsKCiAgICBwcmludGYoInYgZGEgJXMuXG4iLCBwdFthbmFsaXNhKHYsIHNpemVvZiB2IC8gc2l6ZW9mICp2KV0pOwogICAgcHJpbnRmKCJ3IGRhICVzLlxuIiwgcHRbYW5hbGlzYSh3LCBzaXplb2YgdyAvIHNpemVvZiAqdyldKTsKICAgIHByaW50ZigieCBkYSAlcy5cbiIsIHB0W2FuYWxpc2EoeCwgc2l6ZW9mIHggLyBzaXplb2YgKngpXSk7CiAgICBwcmludGYoInkgZGEgJXMuXG4iLCBwdFthbmFsaXNhKHksIHNpemVvZiB5IC8gc2l6ZW9mICp5KV0pOwogICAgcHJpbnRmKCJ6IGRhICVzLlxuIiwgcHRbYW5hbGlzYSh6LCBzaXplb2YgeiAvIHNpemVvZiAqeildKTsKICAgIHJldHVybiAwOwp9