Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Не работает правильно программа

Ответить
Настройки темы
C/C++ - Не работает правильно программа

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


//программа создания однонапрвленного целого списка
#include<stdio.h>
#include<locale.h>
struct tsp{ //1 Объявляем тип
int num;
tsp*next;
};
tsp *Q,*P,*T;//2 Объявляем один или несколько указателей на данную структуру
// Р-адрес начала списка
// Q - переменная для обработки списка,а именно перемещению по нему
// Т - переменная для вставки и удаления элементов из списка
int main()
{
setlocale(LC_ALL,"rus");
//Непосредственное создание списка
T=new tsp;//Создаем фиктивный элемент,зарезервировали память для фиктивного элемента списка и его адрес поместили в Т
T->num=0;//Определили информациоонную часть для фиктивного элемента, этого можно не делать, так в просмотре он не участвует
P=T;//В переменной Р - адрес начала списка
int n,k;// n - количество реальных элементов списка, без уёта фиктивного
printf("Введите количество элементов списка\n");
scanf("%d",&n);
for( int i=1;i<=n;i++)//цикл добавления реальных элементов в список
{
Q=new tsp;//Резервируем память для нового элемента списка и его адрес помещяем в Q
printf("Введите элемент списка\n");
scanf("%d",&Q->num);//Определяем информационную часть нвого элемента
T->next=Q;//Соединяем его с предыдущим элементом:адрес нового подготовленного элемента,который находится в Q,помещаем в адресное поле структуры,адрес которой в T->next
T=Q;//Чтобы повторить предыдущий шаг,адрес только что созданного элемента и присоедеинного к списку элемента (Q) помещаем в T
//После этого присвоения этот элемент Q,а точнее T, будет играть роль предшествующего элемента,а новый элемент Q создадим
}
Q->next=NULL;//Последний элемент должен содержать адрес NULL,это означает,что после него в цепочке не больше элементов списка.
//Начинаем просмотр списка
Q=P->next;//В начале списка есть фиктивный элемент,так как он при просмотре не должен участвовать,то переходим на второй элемент списка,то есть на первый реальный.
//Напоминание!В переменной P находится адрес начала списка

for(int i=1;i<=n;i++)
{
printf("%d\n",Q->num);
Q=Q->next;//Переход на следующий элемент
}
//Нахождение максимального элемента в списке
Q=P;//Переставляем нашу переменую хождения по списку в голову списка
int max = Q->num;
for(int i=1;i<=n;i++)
{
if (Q->num > max) max = Q->num;
Q = Q->next;
}
printf("Максимальный элемент равен = %d\n",max);
Q=P;
//Ищем номер первого максимального
Q=P;//Переставляем нашу переменую хождения по списку в голову списка
for(int i=1;i<=n;i++)
{
if (Q->num == max) {k=i;i=n;}
else Q = Q->next;
}
printf("Номер первого максимального = %d\n",k-1);
Q=P;
for(int i=1;i<=n;i++)
{
if(Q->next->num==max && i!=k)
{
T=Q->next;
Q->next=Q->next->next;
T->next=NULL;
delete T;
}
else Q=Q->next;
}
printf("Новый список\n");
Q=P->next;
while(Q)
{
printf("%d\n",Q->num);
Q=Q->next;//Переход на следующий элемент
}
return 0;
}


Почему программа удаляет все максимальные элементы, не оставляю первого?

Отправлено: 00:32, 05-03-2015

 

Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Вторая Ваша тема подряд с одной проблемой и без ответов, куда подевались пользователи MS Studio?
Не вникаю, просто мысли вслух..... И в первой и во второй теме идет речь о создание массива (0-11, в первой теме и интерактивное предложение ввести количество элементов в списке, сейчас). Что дальше? В одном массиве, не может быть "много" максимальных элементов, ибо выполнил цикл по созданию заданного массива и все ... далее или выход, или начинай формировать новый массив.

Посмотрите алгоритм поиска максимального элемента в массиве - http://liveflowcharts.ru/sites/defau...Max/chart.html

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 05-03-2015 в 07:37.


Отправлено: 00:55, 05-03-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата opel431:
Посмотрите алгоритм поиска максимального элемента в массиве »
Я прекрасно знаю алгоритм нахождения максимального элемента в массиве.Проблема в том,что при поиске повторных максимальных, программа игнорирует дополнительное условие i!=k.

Отправлено: 07:42, 05-03-2015 | #3


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата:
Почему программа удаляет все максимальные элементы, не оставляю первого?
Потому что при поиске максимального if (Q->num == max)
а при удалении if(Q->next->num==max && i!=k)

k нужно увеличить на единицу в условии

-------
Ehhh.. what's up, doc?..


Отправлено: 10:32, 05-03-2015 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Не работает правильно программа

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Не работает правильно программа artyomartemyev96 Программирование и базы данных 4 09-11-2014 10:45
USB Не правильно работает snv099 Мобильные ОС, смартфоны и планшеты 5 11-08-2014 17:33
ParkCity DVR HD500 не правильно работает Devastator1985 Видео и аудио: обработка и кодирование 5 30-07-2013 22:04
C/C++ - Программа календарь работает не правильно denver-312 Программирование и базы данных 1 08-12-2007 02:01
Программа не работает в XP, в w2k и w98 работает Guest Microsoft Windows 2000/XP 6 25-05-2004 06:18




 
Переход