powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Одномерный массив
11 сообщений из 36, страница 2 из 2
Одномерный массив
    #38617285
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryluislom Только жаль вы использовали #include <algorithm>

Как два пальца:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
#include <iostream>
#define N 140
#define M 800

namespace my_std{

template<typename In , typename Pos, typename Cmp> 
  inline In prt(In len, In p, Pos pt, Cmp cmp){
  Pos pos=pt;
  In l=0;
  In r=len;

     while(l!=r){

     while(cmp(*(pos+l), *(pos+p))){ ++l; if(l==r){ return l; }; };

        do{ --r; if(l==r){ return l; }; }while(cmp( *(pos+p), *(pos+r)));

         std::swap(*(pos+l), *(pos+r)); /* Ну извиняйте, не из <algorithm> зверёк, всё по честному */
     ++l;
    };
  return l;
  };

template<typename In , typename Pos, typename  Cmp> 
  
 Pos sort(In len, Pos pt, Cmp cmp){
   Pos pos=pt;
   In j;
   In l;
  
  switch(len){

  case 2 : if( cmp(*(pos+1), *pos)){  std::swap(*pos, *(pos+1)); }; pos+=2; return pos;  
  
  case 1 : pos++; return pos;

  default : 
         l=0; j=0;   
   
       while(l==0){ if(j==len){ pos+=len; return pos; };
         
     l=prt(len, j, pos, cmp); j++;
       
      }; break;
    };
  
   return sort(len-l, sort(l, pos,cmp), cmp);

  };

 };
 
int cmp(int* a, int* b){ return *a<*b; };

int main () {

 int A[N];
 int* Ap[N];
 
int B[M];
 int* Bp[M]; /* В freebsd даже jemalloc есть, а тут занимаются прнгрф. */

int i=N;
int n;
int m;
int* A_p;
int* B_p;

 do{ --i; Ap[i]=&A[i]; A[i]=random(); }while(i>0);
i=M;
 do{ --i; Bp[i]=&B[i]; B[i]=random(); }while(i>0);
 my_std::sort(N, Ap, cmp);
 my_std::sort(M, Bp, cmp); /* Сигнатуры изменены, Александреску негодуе */

  i=0; n=0;

  if((i=Ap[N-1]-Ap[0]-1)<0){ i=Ap[0]-Ap[N-1]-1; A_p=Ap[N-1]; }else{ A_p=Ap[0]; };
  if((n=Bp[M-1]-Bp[0]-1)<0){ n=Bp[0]-Bp[M-1]-1; B_p=Bp[M-1]; }else{ B_p=Bp[0]; }

  m=i+n;

int* C;int x=N;  while(x>0){ std::cout<<"Ok A "<<A[--x]<<std::endl; };
 x=M; while(x>0){ std::cout<<"Ok  B "<<B[--x]<<std::endl; };
x=m;
try{

 C=new int[m]; /* или int C[m] */

 }catch(std::bad_alloc& c){ std::cout<<"Yob Na\n"; exit(-1); };

 while(i>0){ --m; --i; C[m]=*(++A_p); };
                                             
while(n>0){ --m; --n; C[m]=*(++B_p); }; 
/*

..................................................................................

*/
  delete [] C;

};
...
Рейтинг: 0 / 0
Одномерный массив
    #38618074
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
luislom
Код: plaintext
1.
         std::swap(*(pos+l), *(pos+r)); /* Ну извиняйте, не из <algorithm> зверёк, всё по честному */


Брехня .
...
Рейтинг: 0 / 0
Одномерный массив
    #38618389
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokluislom
Код: plaintext
1.
         std::swap(*(pos+l), *(pos+r)); /* Ну извиняйте, не из <algorithm> зверёк, всё по честному */


Брехня .

Задание 1. Прочитайте то, что пишут по ссылке, в частности "This function is no longer defined in header <algorithm>, but in <utility>"

Задание 2. В примере нет #include <algorithm>, но почему компилятор не ругается на swap? Значит ли это, что swap не из <algorithm>?

Задание 3. В каком файле расписан swap?
...
Рейтинг: 0 / 0
Одномерный массив
    #38619469
SergeyVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем задание было неправильно выполнено, т.к. надо было задавать функцию, если не ошибаюсь, то массив должен выглядеть примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
void cm(int A[], int a)
{
int i;
for (i=0; i<a; i++)
A[i]=i+rand();
}
void pm(int A[], int a)
{
int i;
for (i-0; i<a; i++)
printf ("%d", A[i]);
printf ("\n");
}
void main ()
{
int a[16], b[26];
printf("A[i]=");
cm(a,16);
pm(a,16);
printf("B[i]=");
cm(b,26); 
pm(b,26);
}
...
Рейтинг: 0 / 0
Одномерный массив
    #38619470
SergeyVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее правильно, но к теме лабораторной, к сожалению, не относилось
...
Рейтинг: 0 / 0
Одномерный массив
    #38619609
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyVDточнее правильно, но к теме лабораторной, к сожалению, не относилось

Ну дык отдай им :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
#include <iostream>
#include <string.h>

namespace my_std{

template<typename Pos, typename Cmp> 
  inline Pos prt(Pos fr, Pos md, Pos lt, Cmp cmp){
   
     while(lt!=fr){

     while(cmp(*fr, *md)){ ++fr; if(lt==fr){ return fr; }; };

        do{ --lt; if(lt==fr){ return fr; }; }while(cmp(*md, *lt));

         std::swap(*fr, *lt);
     ++fr;
    };
  return fr;
  };

template<typename Pos, typename  Cmp> 
  
inline  void sort(Pos pt, Pos pm, Cmp cmp){
  
   Pos tmp, m;
  if((pt+1)==pm){ 
   if( cmp( *pm , *pt) ){  std::swap(*pt, *pm); }; return; }; 
  
  if(pt==pm)  return;

         m=pt;  
        tmp=pt;
       
   while(tmp==pt){ if(m==pm){  return; };
         
     tmp=prt(pt, m++, pm, cmp); 
       
      }; 
  
  
    sort(pt, tmp, cmp);
    sort(tmp, pm, cmp);

  };
 };
template <typename Mas>
 
int cmp(Mas a, Mas b){ return *a < *b; };

template <typename Mas, typename Num>

 struct Res{

 Res(Mas* m, Num n): pointer(m), size(n){};
 Res(const Res& r): pointer(r.pointer), size(r.size){};
 Res& operator=(const Res& r){ if(this!=&r){ size=r.size; pointer=r.pointer; }; return *this; };
 ~Res(){};
 Mas* pointer;
 Num  size;

 };

template <typename Tp, typename Num >
 
 Res<Tp, Num> Gen (Tp* A, Num N, Tp* B, Num M) {

 Tp* Ap[N];
 Tp* Bp[M]; 
 Num i;
 Num n;
 Num m;
 Tp *A_p, *B_p, *C;
i=N;
 do{ --i; Ap[i]=A+i; }while(i>0);
i=M;
 do{ --i; Bp[i]=B+i; }while(i>0);
 

 my_std::sort(Ap, Ap+N-1, cmp<Tp*>);
 my_std::sort(Bp, Bp+M-1, cmp<Tp*>); 

  i=0; n=0;

  if((i=Ap[N-1]-Ap[0]-1)<0){ i=Ap[0]-Ap[N-1]-1; A_p=Ap[N-1]+1; }else{ A_p=Ap[0]+1; };
  if((n=Bp[M-1]-Bp[0]-1)<0){ n=Bp[0]-Bp[M-1]-1; B_p=Bp[M-1]+1; }else{ B_p=Bp[0]+1; }

  m=i+n;
 
 try{

  C=new Tp[m];

 }catch(std::bad_alloc& c){ std::cout<<"Fack\n"; return Res<Tp, Num>(NULL,0); };

 memcpy(C, A_p, sizeof(Tp)*i);
 memcpy(C+i, B_p,sizeof(Tp)*n);
                                             
   return Res<Tp, Num>(C, m);

};
 

int main(){
int A[16];
int B[10];
int i;

i=16;
 do{  A[--i]=random(); }while(i>0);
i=12;
 do{  B[--i]=random(); }while(i>0);
 
 Res<int, int> r=Gen(A, 16, B, 12);i=r.size; i=r.size; while(i>0){ std::cout<<"Ok "<<r.pointer[--i]<<std::endl;};
delete [] r.pointer;
 
};

 
...
Рейтинг: 0 / 0
Одномерный массив
    #38620755
SergeyVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smald, я то отдам, но вот как объяснять его буду...)
...
Рейтинг: 0 / 0
Одномерный массив
    #38620761
luislom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyVDsmald, я то отдам, но вот как объяснять его буду...)

А что там объяснять? ИМХО не linux kernel по объёму.
...
Рейтинг: 0 / 0
Одномерный массив
    #38620767
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyVDsmald, я то отдам, но вот как объяснять его буду...)
трояк заработаешь, а больше не заслуживаешь
...
Рейтинг: 0 / 0
Одномерный массив
    #38620768
SergeyVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
luislom, человеку, который мало чего смыслит в информатике, трудно вникать в такие коды. К тому же у меня только началось программирование, и многое еще не успели пройти...
...
Рейтинг: 0 / 0
Одномерный массив
    #38620770
SergeyVD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smald, и спасибо вам за хоть и сложный, но хоть какой-то вариант)
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Одномерный массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]