• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите найти ошибку, неправильно выводит номер первого максимального элемента

  • Автор темы Автор темы BTS
  • Дата начала Дата начала

BTS

Ученик
Регистрация
13 Дек 2014
Сообщения
6
Реакции
0
Баллы
0
Помогите найти ошибку, неправильно выводит номер первого максимального элемента

/*Найти номер первого максимального элемента среди элементов, лежащих в диапазоне от 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));
}

}
 
Назад
Сверху