IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Проблема с организацией списка FIFO, C++
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Добрый вечер. Необходимо решить следующую задачу:

Разработать алгоритм и программу. Организовать и заполнить два линейных динамических списка L1 и L2 типа FIFO, элементами которых являются целые числа, принимающие значения в диапазоне типа Integer.
Выполнить следующие действия над списками:
- удалить из списка L1 все отрицательные числа и поместить их в список L2, взяв их по модулю;
- определить включает ли список L1 список L2, если включение имеет место, то объединить эти списки в один и упорядочить по возрастанию значений элементов.
Действия выполнятся в произвольном порядке по выбору пользователя с отображением результатов преобразований. При заполнении списка и добавлении элементов выполнить анализ объема доступной динамической памяти.


Начал писать программу столкнулся с такой проблемой необходимо в функцию передать 2 значения, из другой функции т.е. у меня функция spisok_L1 которая заполняет список, и функция prosmotr, но чтобы вывести значения из памяти мне необходимо знать адрес откуда начинать, и когда заканчивать вывод. Переменная schet4ik отвечает за количество элементов в списке, эта переменная передается, но как мне передать переменную которая указывает на начало списка.




#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
int menu ()
{
char menu[5][15]={{"Dobavlenie"},{"Prosmotr"},{"Sortirovka"},{"ochistka file"},{"exit"}};
int index=0;
char ch='\0';
int i,j=0;
while (ch!=13)
{
clrscr();
for (i=0;i<=4;i++)
{
if (i==index)
textattr(70);
j=0;
while (menu[i][j]!='\0')
cprintf("%c",menu[i][j++]);
printf("\n");
textattr(07);
}
ch=getche();
if (ch=='\0') ch=getch();
if (ch==72) index--;
if (ch==80) index++;
if (index==-1) index=4;
if (index==5) index=0;
}
return index;
}

struct L1
{
int info;
struct L1 *next;
};


spisok_L1()
{
L1 *head, *p;//*tail;
int chislo=0;
char ch='\0';
int schet4ik=0;

head=new(L1);
p=head;

while (ch!='n')
{
clrscr();
cout << "Vvedite element spiska " << endl;
cin >>chislo;
cout << endl;
(*p).info=chislo;
(*p).next=new(L1);
p=(*p).next;
//tail=p;
schet4ik++;
cout << "Prodoljitb vvod? [y/n]" << endl;
ch = getche();
cout << endl;
}
clrscr();
p=head;
//while (p!=tail)
{
//printf("%d",p->info);
//p=p->next;
}
return schet4ik;
}





int prosmotr (int schet4ik)
{
L1 *p, *head;
int k=0;

p=head;
while (k!=schet4ik)
{
cout << (*p).info << endl;
p=(*p).next;
k++;
}

//for (p=head;p!=tail;p=(*p).next)
// cout << (*p).info << endl;

getche();
return 0;
}

void main ()
{
L1 *head, *p, *tail;
int index;
int m=0;
do
{
index=menu();
switch (index)
{
case 0:{
m=spisok_L1();
break;
}
case 1:{
prosmotr(m);
break;
}
case 2:{

break;
}
case 3:{

break;
}
case 4:{

exit(1);
}

}
}
while (index!=4);


getch();
}

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Добавил еще 1 функцию Sort () которая должна сортировать значения в 1м списке, т.е если значения в 1м списке отрицательные их нужно из первого списка удалить и поместить в другой (по модулю), все вроде нормально работает, из 1го все нормально удаляется, только когда помещаю во второй, данные вроде заносятся, а когда считываю 2й список пуст. Объявил еще 1 класс для 2го списка.

#include <iostream.h>
#include <stdio.h>
#include <conio.h>

int menu()
{
const int nItems = 5;
const char *menu[nItems] = {
"Dobavlenie", "Prosmotr", "Sortirovka", "ochistka", "exit"
};

int index = 0;
char ch = '\0';

while(ch != 13)
{
clrscr();
for(int i = 0; i < nItems; i++)
{
if(i == index) textattr(70);
cprintf("%s\r\n", menu[i]);
textattr(7);
}

int delta = 0;
if((ch = getch()) == 0)
{
ch = getch();
switch(ch)
{
case 72:
delta = -1; break;
case 80:
delta = +1; break;
}
index = (nItems + index + delta) % nItems;
}
}
return index;
}


class List
{
public:
List()
{
head = tail = 0;
}
void Append(int);
void Print();
void Sort();
private:
class ListItem
{
public:
int val;
ListItem *next;

ListItem(int value, ListItem *item = 0)
{
val = value; next = item;
}
};

ListItem *head, *tail;
};


class List2
{
public:
List2()
{
head2 = tail2 = 0;
}
void Append2(int);
void Print2();
void Sort2();
private:
class ListItem2
{
public:
int val2;
ListItem2 *next2;

ListItem2(int value2, ListItem2 *item2 = 0)
{
val2 = value2; next2 = item2;
}
};

ListItem2 *head2, *tail2;
};



void List2::Append2(int val2)
{
ListItem2 *p2 = new ListItem2(val2);
if(!head2) head2 = p2;
else tail2->next2 = p2;

tail2 = p2;
}


void List2::Print2()
{

int x=1,y=1;

for(ListItem2 *p2 = head2; p2; p2 = p2->next2)
{
gotoxy(x+15,y);
cout << p2->val2 << endl;
y++;
}

}


void List::Append(int val)
{
ListItem *p = new ListItem(val);
if(!head) head = p;
else tail->next = p;

tail = p;
}
void List::Print()
{
for(ListItem *p = head; p; p = p->next)
{
cout << p->val << endl;
}
}

void List::Sort()
{
ListItem *p = head;
p=head;
int zna4=0;
List2 L2;
ListItem *tek;
int perest=0;
while (p!=NULL)
{
if ((p->val < 0)&&(p==head)&&(perest==0))
{
zna4=p->val * (-1);
L2.Append2(zna4);
tek=p;
head=head->next;
delete(tek);
perest=1;
}
if ((p->next->val < 0)&&(p->next!=tail)&&(perest==0))

{
zna4=p->next->val * (-1);
L2.Append2(zna4);
tek=p->next;
p->next=tek->next;
delete(tek);
perest=1;
}
if ((p->next->val < 0)&&(p->next==tail)&&(perest==0))
{
zna4=p->next->val * (-1);
L2.Append2(zna4);
tek=p->next;

p->next=tail->next;
delete(tek);
tail=p;
perest=1;

}


if (perest==1)
p=head;
else
p=p->next;
perest=0;
}
}

int main ()
{
List myList;
List2 myList2;
int index;

do
{
switch(index = menu())
{
case 0:
{
char ch = '\0';
int n;

while(ch != 'n')
{
clrscr();
cout << "Vvedite element spiska" << endl;
cin >> n;

myList.Append(n);
cout << "Prodoljitb vvod? [y/n]" << endl;
ch = getch();
}
}
break;

case 1:
clrscr();
myList.Print();
myList2.Print2();
getch();
break;

case 2:
{
myList.Sort();
}
case 3:
break;
}

}
while(index < 4);

return 0;
}


Сообщение отредактировано: ninja -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
ninja   Проблема с организацией списка FIFO   17.05.2010 23:55
volvo   Через двойной указатель. Вот так, например: int s…   18.05.2010 0:35
ninja   Спасибо огромное работает.   18.05.2010 21:41
ninja   Появилась еще одна проблема: когда запускаю програ…   18.05.2010 23:09
volvo   Я устал уже догадываться, тебе нужен С или С++, ты…   18.05.2010 23:54
ninja   Спасибо огромное Владимир, вообще нужно на С++, я …   19.05.2010 0:57
volvo   Вот это - больше похоже на С++, чем то, что было н…   19.05.2010 21:55
ninja   ага, у меня обычный dos-овский Turbo C++, Владимир…   20.05.2010 3:22
ninja   Добавил еще 1 функцию Sort () которая должна сорти…   20.05.2010 20:39
volvo   Зачем? Достаточно было сделать: List myList; …   20.05.2010 21:22
ninja   Отсортировать нужно следующим образом, в 1м списке…   20.05.2010 21:36
volvo   Ты постоянно что-то недоговариваешь... Ну, допусти…   20.05.2010 21:41
ninja   Извиняюсь.... Необходимо сначала разделить 1й спис…   20.05.2010 22:34
volvo   Значит, смотри что у меня получилось: Рассказыв…   21.05.2010 1:47
ninja   Владимир, тестировал сегодня программу, получились…   21.05.2010 18:58
volvo   Ну что ж, проверяем: И я вводил: Что я делал н…   21.05.2010 19:38
ninja   Вводил тоже что и Вы у меня совсем другие результа…   21.05.2010 20:03
volvo   У меня GCC, там все нормально, вечером попробую пр…   21.05.2010 21:12
ninja   Спасибо, попробовал по-другому ввел сначала положи…   21.05.2010 21:18
volvo   Ну, скачай. Как скачаешь - на GCC (и на любом друг…   22.05.2010 2:31
ninja   скачал GCC, попробовал запустить вроде работает но…   22.05.2010 4:01
volvo   Потому что функция clrscr - это "примочка…   22.05.2010 4:09
ninja   я имел ввиду синтаксис вот например private: …   22.05.2010 19:50


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

 





- Текстовая версия 18.05.2024 18:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name