Кому порешать задачи - пишите сюда

DaNIK

Брассист
да я понял что с RSA не успею разобраться
и не я один...)
 
Язык c++

Есть класс для динамических списков, нужно написать процедуру или как-то реализовать объединение двух (или более, возможно восьми) списков в один

class linklist
{
private:

struct node
{
int data;
node *link;
}*p;

public:

linklist();
void append( int num );
void add_as_first( int num );
void addafter( int c, int num );
void del( int num );
void display();
int count();
~linklist();
};

linklist::linklist()
{
p=NULL;
}

void linklist::append(int num)
{
node *q,*t;

if( p == NULL )
{
p = new node;
p->data = num;
p->link = NULL;
}
else
{
q = p;
while( q->link != NULL )
q = q->link;

t = new node;
t->data = num;
t->link = NULL;
q->link = t;
}
}

void linklist::add_as_first(int num)
{
node *q;

q = new node;
q->data = num;
q->link = p;
p = q;
}

void linklist::addafter( int c, int num)
{
node *q,*t;
int i;
for(i=0,q=p;i<c;i++)
{
q = q->link;
if( q == NULL )
{
cout<<"\nThere are less than "<<c<<" elements.";
return;
}
}

t = new node;
t->data = num;
t->link = q->link;
q->link = t;
}

void linklist::del( int num )
{
node *q,*r;
q = p;
if( q->data == num )
{
p = q->link;
delete q;
return;
}

r = q;
while( q!=NULL )
{
if( q->data == num )
{
r->link = q->link;
delete q;
return;
}

r = q;
q = q->link;
}
cout<<"\nElement "<<num<<" not Found.";
}

void linklist::display()
{
node *q;
cout<<endl;

for( q = p ; q != NULL ; q = q->link )
cout<<endl<<q->data;

}

int linklist::count()
{
node *q;
int c=0;
for( q=p ; q != NULL ; q = q->link )
c++;

return c;
}

linklist::~linklist()
{
node *q;
if( p == NULL )
return;

while( p != NULL )
{
q = p->link;
delete p;
p = q;
}
}
 

dreamer

Member
Язык c++

Есть класс для динамических списков, нужно написать процедуру или как-то реализовать объединение двух (или более, возможно восьми) списков в один
Что сложного? Создаёшь еще один список и добавляешь в него элементы из всех переданных списков. Для передачи разного числа аргументов читай va_list.
 
Что сложного? Создаёшь еще один список и добавляешь в него элементы из всех переданных списков. Для передачи разного числа аргументов читай va_list.
алгоритм понятен, конечно (хотя мне кажется указатель последнего элемента одного списка направить на начальный второго более ресурсноэкономно). проблема именно в реализации для классов, ведь linklist l1,l2, например, это не списки. возможно, я не так формулирую, но понять как реализовать объединение для конкретного случая без понятия
 

nuHrBuH

один
язык паскаль.
Найти минимальные значения и их номера в массивах A,B и C.
uses wincrt;
Type mas=array[1..100] of integer;
Function Kuch(x:mas;n,k:byte):integer;
var i,j,j_min:byte;
min,r:integer;
begin
For i:=1 to k do
begin
j_min:=1;
min:=x[1];
for j:=2 to n-i+1 do
if min>x[j] then
begin
J_min:=j;
min:=x[j];
end;
r:=x[j_min];
x[j_min]:=x[n-i+1];
x[n-i+1]:=r;
writeln('x[',j_min,']=',min);
end; end;
Procedure Wr(var x:mas;var n,k:byte);
var i:byte;
begin
Write('Введите кол. мин. эл:'); readln(k);
write('Размер веkтора: ');readln(n);
Writeln('Введите сам вектор:');
for i:=1 to n do
read(x);
end;
Var a,b,c:mas;
k,g,p,j,l,m,n:byte;
begin
writeln('Massive A:');
Wr(a,n,k);
writeln('Massive B:');
wr(b,m,g);
writeln('Massive C:');
wr(c,l,p);
Writeln('min A');
write(kuch(a,n,k));
Writeln('min B');
write(kuch(B,m,g));
writeln('min C');
write(kuch(C,l,p));
end.
Вот код. Тех цифр там не должно быть
You must be registered for see images attach
 

Пух

كنت بلهاء
Модератор
Код:
var x=array[1..100] of integer;
     i,min,k,n:integer;
begin
 min=32000;
 k=1;
 n=10;
 for i:=1 to n do
   begin
     readln(x[i]);
        if x[i]<min 
           begin
             min=x[i];
             k=i;
           end;
  end;
 writeln('min=',min,',ind=',k);
end.
вот так ищется минимальный элемент. Можно точней (брать за начальный минимальный 1й элемент массива), но написанный вариант будет не точным только тогда, когда будут числа больше 32000.
 
Останнє редагування:

nuHrBuH

один
Та не, меня интересуют цифры, которые появляются после запуска программы(показаны на скрине). Не могу найти ошибку у себя в коде(код выше написан).
 

Пух

كنت بلهاء
Модератор
хз, влом смотреть... вот накидал быстренько примерное решение, функция возвращает минимальный элемент, переменная j - его индекс.
Код:
uses crt;
type arr=array[1..100] of integer;

Function min(x:arr;var j:integer;n:integer):integer;
  begin
    var i,t:integer;
    j:=1;t:=32000;
    for i:=1 to n do
      begin
       writeln('Enter ',i,' element');
        readln(x[i]);
          if x[i]<t then
           begin
             t:=x[i];
             j:=i;
           end;
    end;
      
    min:=t;
 end;
 begin
  var n,j:integer;
  var a,b,c:arr;
  n:=5;
  writeln('min from array A=',min(a,j,n));
  writeln('index min from array A=',j);
  n:=6;
  writeln('min from array B=',min(b,j,n));
  writeln('index min from array B=',j);
  n:=5;
  writeln('min from array C=',min(c,j,n));
  writeln('index min from array C=',j);
  readln;
 end.
 

Storm_10

Member
очень нужна помощь по Паскалю...
задача: найти произведение "Л" последних отрицательных элементов массива ...
пожалуйста кто может напишите программу, а то как не делал не решает правильно, так что смысла вставлять текст своей программы нет...

 
Останнє редагування:

Пух

كنت بلهاء
Модератор
очень нужна помощь по Паскалю...
задача: найти произведение "Л" последних отрицательных элементов массива ...
пожалуйста кто может напишите программу, а то как не делал не решает правильно, так что смысла вставлять текст своей программы нет...
Код:
pr:=1; count=0;
for i:=1 to n do
   readln(a[i]);
if (n<L)
   write('Error');
for i:=n downto 1 do
  begin
    if a[i]<0 then
       begin
          inc(count);
          pr:=pr*a[i];
       end;
   if count=L then
     break;
end;

if (count<>L) then
     write('Error');
else
     write('pr=',pr);

end.
примерно так. Ошибку напишет когда отрицательных элементов меньше чем "Л" и когда "Л" больше чем n.
 
Останнє редагування:
Зверху