Помогите найти ошибку, неправильно выводит номер первого максимального элемента
/*Найти номер первого максимального элемента среди элементов, лежащих в диапазоне от x до y, и расположенных правее первого положительного элемента.*/
#include <stdio.h> #include <math.h> #include <locale.h> #include <stdlib.h> void vvod(int n1, int *A1); void poisk(int *A1, int n1); void vivod(int *A1, int n1); int n, *A, xi, yi, p; //max, nmax void main() { setlocale(0, "russian"); for( ;; ){ printf("Введите количество элементов\n"); scanf("%d", &n); if (!(A = (int*)malloc(n*sizeof(int)))) printf("Память не выделилась\n"); printf("Введите xi > = 0\n"); scanf("%d", &xi); printf("Введите yi > = 0\n"); scanf("%d", &yi); if (yi <= xi|| xi<0 || yi<0) { printf("Вы ввели неверный диапазон повторите попытку: \n"); printf("Введите xi\n"); scanf("%d", &xi); printf("Введите yi\n"); scanf("%d", &yi); } vvod(n, A); poisk(A, n); vivod(A, n); }} void vvod(int n1, int *A1) { int i; for (i = 0; i < n1; i++) { printf("Введите %d элемент \n", i+1); scanf("%d", A1 + i); } printf("Массив введен n \n"); } void poisk(int *A1, int n1) { int t = 0, i, p, k = 0, max, nmax; for ( i = 0; i < n1; i++) { if (*(A1 + i)>0) { p = i; i = n1; t++; } } if (t == 0) { printf("Нет положительных элементов\n"); return; } max = *(A1 + p + 1); nmax = p + 1; for (i = p + 1; i < yi; i++) { if (i > xi) { if (*(A1 + i) > max) { max = *(A1 + i); nmax = i; k++; } } else max = *(A1 + i + 1); } if (max == *(A1 + p + 1)) k++; if (k = 0) printf("net.\n"); printf("номер макс элемента %d \n", nmax); { if (max == *(A1 + p)) if (k = 0) printf("net.\n"); printf("первый максимальный элемент стоит последним № данного элемента: %d \n", nmax); } } void vivod(int *A1, int n1) { int i; for (i = 0; i < n1; i++) { printf("элемент %d = %d \n", i + 1, *(A1 + i)); } } |
Часовой пояс GMT +4, время: 06:15. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.