Помощь - Поиск - Пользователи - Календарь
Полная версия: МАССИВЫ > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
Neuch
Дана задача сформировать массив и поменять местами в нем последний отрицательный элемент и максимальный положительный элемент местами.

Написал прогу, но не могу найти где ошибся......помогите пожалуйстаsmile.gif


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
const int N=100; //максимальный размер массива
int A[N], i, //индекс элемента массива
n, d, //количество элементов в массиве
imin, //индекс минимального элемента
iotr; //индекс отрицательного элемента
printf("Vvedite chislo elementov massiva:");
scanf("%d", &n);
for (i=0; i<n; i++)
{
printf ("Vvedite elementi massiva A[%d%s",i,"]=");
scanf("%d", &A[i]);
imin=0; //предполагаем что первый элемент минимальный
}
for (i=0; i<(n-1); i++)
{ //Если текущий элемент массива меньше минимального, то запоминаем его индекс
if (A[imin]<A[i])
imin=i;
}
if (A[n-1]<0) // проверяем, является ли последнее число в массиве отрицательным

{ iotr=n-1;}

d=A[imin];
A[imin]=A[iotr];
A[iotr]=d;

printf("otr %d \n",A[iotr]);
printf("min %d \n",A[imin]);


printf("Posle perestanovki massiv A[]=");
for (i=0; i<n; i++)
printf("%d", A[i]);
getch();
}
граф Монте-Кристо
Какие ошибки при компилляции?
Последний отрицательный элемент - имеется в виду, последний из тех,которые есть в массиве. Необязательно же самый последний элемент будет отрицательным.
Евгений М.
1. В комментариях вы пишите "Если текущий элемент массива меньше минимального, то запоминаем его индекс".
Код
if (A[imin]<A[i])
imin=i;

А вы поставили следующее условие: "Если текущий элемент массива больше минимального, то запоминаем его индекс".

2. В этом же цикле нужно запомнить последний отрицательный элемент. Условие, которую вы установили для нахождения "последнего отрицательный элемента", не соответствует требованию задачи, а также может привести к ошибке при выполнении программы. Например: Если пользователь вводит последний элемент положительным, то переменная iotr будет иметь не понятно какое значение. И ваша программа будут ввести себя не предсказуемо при выполнении A[imin]=A[iotr];.

3. Возможен случай, когда пользователь будет вводит только положительные числа или только отрицательные. Вам нужно это учесть.
Neuch
Цитата(граф Монте-Кристо @ 5.12.2009, 10:48) *

Какие ошибки при компилляции?
Последний отрицательный элемент - имеется в виду, последний из тех,которые есть в массиве. Необязательно же самый последний элемент будет отрицательным.


При компиляции выдает не то что нужно....
не находит самый минимальный положительный элемент, а за место него пишит в переменную отрицательный элемент.
И по условию задачи поменять местами ПОСЛЕДНИЙ отрицательный элемент с минимальным положит-м элем-ом...
что бы проверить последний элементя я сделал условие

if (A[n-1]<0)
Neuch
Вроде исправил....

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
const int N=100; //ìàêñèìàëüíûé ðàçìåð ìàññèâà
int A[N], i, //èíäåêñ ýëåìåíòà ìàññèâà
n, d, //êîëè÷åñòâî ýëåìåíòîâ â ìàññèâå
imin, //èíäåêñ ìèíèìàëüíîãî ýëåìåíòà
iotr; //èíäåêñ îòðèöàòåëüíîãî ýëåìåíòà
printf("Vvedite chislo elementov massiva:");
scanf("%d", &n);
for (i=0; i<n; i++)
{
printf ("Vvedite elementi massiva A[%d%s",i,"]=");
scanf("%d", &A[i]);
imin=0; //ïðåäïîëàãàåì ÷òî ïåðâûé ýëåìåíò ìèíèìàëüíûé
}
for (i=0; i<n-1; i++)
//Åñëè òåêóùèé ýëåìåíò ìàññèâà ìåíüøå ìèíèìàëüíîãî, òî çàïîìèíàåì åãî èíäåêñ
if (A[i]<A[imin]) imin=i;
if (A[i]<0) iotr=i; // ïðîâåðÿåì, ÿâëÿåòñÿ ëè ïîñëåäíåå ÷èñëî â ìàññèâå îòðèöàòåëüíûì



printf("otr %d \n",A[iotr]);
printf("min %d \n",A[imin]);

d=A[iotr];
A[iotr]=A[imin];
A[imin]=d;

printf("Posle perestanovki massiv A[]=");
for (i=0; i<n; i++)
printf("%d", A[i]);
getch();
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.