IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> МАССИВЫ, С++
Neuch
сообщение 5.12.2009, 4:17
Сообщение #1


Школьник
*

Группа: Продвинутые
Сообщений: 33
Регистрация: 28.10.2009
Город: Красноярск
Учебное заведение: ИКИТ
Вы: студент



Дана задача сформировать массив и поменять местами в нем последний отрицательный элемент и максимальный положительный элемент местами.

Написал прогу, но не могу найти где ошибся......помогите пожалуйста(IMG:style_emoticons/default/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();
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
граф Монте-Кристо
сообщение 5.12.2009, 10:48
Сообщение #2


Доцент
******

Группа: Преподаватели
Сообщений: 3 840
Регистрация: 27.9.2007
Из: Старый Оскол
Город: Москва
Учебное заведение: МФТИ/МАИ
Вы: другое



Какие ошибки при компилляции?
Последний отрицательный элемент - имеется в виду, последний из тех,которые есть в массиве. Необязательно же самый последний элемент будет отрицательным.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Евгений М.
сообщение 5.12.2009, 11:07
Сообщение #3


Студент
**

Группа: Продвинутые
Сообщений: 199
Регистрация: 6.11.2009
Город: Уфа
Вы: студент



1. В комментариях вы пишите "Если текущий элемент массива меньше минимального, то запоминаем его индекс".
Код
if (A[imin]<A[i])
imin=i;

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

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

3. Возможен случай, когда пользователь будет вводит только положительные числа или только отрицательные. Вам нужно это учесть.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Neuch
сообщение 5.12.2009, 12:57
Сообщение #4


Школьник
*

Группа: Продвинутые
Сообщений: 33
Регистрация: 28.10.2009
Город: Красноярск
Учебное заведение: ИКИТ
Вы: студент



Цитата(граф Монте-Кристо @ 5.12.2009, 10:48) *

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


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

if (A[n-1]<0)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Neuch
сообщение 5.12.2009, 14:08
Сообщение #5


Школьник
*

Группа: Продвинутые
Сообщений: 33
Регистрация: 28.10.2009
Город: Красноярск
Учебное заведение: ИКИТ
Вы: студент



Вроде исправил....

#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();
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 25.5.2025, 19:32

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru