Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пожалуйста помогите решить задачу зарание спасибо! / 20 сообщений из 20, страница 1 из 1
28.05.2014, 18:00
    #38654888
alinyshka1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
Дана матрица А размером п х т. Определить k — количество особых элементов массива А, считая его элемент особым, если он больше суммы остальных элементов его столбца.
...
Рейтинг: 0 / 0
28.05.2014, 18:06
    #38654894
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
alinyshka1считая его элемент особым, если он больше суммы остальных элементов его
столбца.
Т.е. если его значение больше половины суммы всех значений данного столбца.

Так в чём твоя проблема? Не умеешь посчитать сумму всех элементов столбца матрицы?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.05.2014, 19:35
    #38654978
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
alinyshka1Дана матрица А размером п х т. Определить k — количество особых элементов массива А, считая его элемент особым, если он больше суммы остальных элементов его столбца.

Так можно.

Код: 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.
#include <iostream>
#include <algorithm>

bool cmp(int* s1, int* s2){ return *s1 < *s2; };

template <typename T, typename N, typename C>

 N func(T s, N m, N n, C cm){
  T mas[n], tmp;
  N p, sum, count=0;
  
 while( m-- > 0){
  p=0; sum=0; 
 while( p < n){ tmp=s+m+p; sum+=*tmp; mas[p++]=tmp; };
  --p;
  std::sort(mas, mas+n, cm );

 if( **(mas+p) > sum/2 ) ++count;

 };

 return count;

 };

int main()
{
int s[50];
int i=50;
while(i>0){ s[--i]=random(); };

std::cout<<"Res "<<func(s, 5, 10, cmp)<<std::endl; 
}
...
Рейтинг: 0 / 0
28.05.2014, 20:45
    #38655026
alinyshka1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
smald,

у меня random выдает за ошибку
...
Рейтинг: 0 / 0
28.05.2014, 22:36
    #38655085
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
alinyshka1smald,

у меня random выдает за ошибку

Ну и поставь другой генератор, random unix специфичен.

Добавь

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
struct randm{
 randm(): s(std::chrono::system_clock::now().time_since_epoch().count()), gn(s){};
 unsigned s;
  std::mt19937 gn;
 long unsigned operator()(){ return gn(); }; 
 };

int main(){

 int s[50];
int i=50;
randm rndm;

while(i>0){ s[--i]=rndm(); };

std::cout<<"Res "<<func(s, 5, 10, cmp)<<std::endl; };



И ещё добавить заголовки

Код: plaintext
1.
2.
#include <random>
#include <chrono>
...
Рейтинг: 0 / 0
29.05.2014, 02:02
    #38655189
iv_an_ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
smald,

Занудства ради, такие задачи надо обязательно тестировать на рандоме, который охватит и отрицательные значения. Иначе можно не увидеть, к примеру, массив, в котором все элементы --- особые, или ещё какую интересность.
...
Рейтинг: 0 / 0
29.05.2014, 12:16
    #38655588
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
iv_an_rusmald,

Занудства ради, такие задачи надо обязательно тестировать на рандоме, который охватит и отрицательные значения. Иначе можно не увидеть, к примеру, массив, в котором все элементы --- особые, или ещё какую интересность.

На самом деле там специально оставил недоделку, кроме Вас вообще никто не обратил внимание.
Но ваше замечание тоже не правильно, так как, целевой массив int, и, при присвоении значения,
диапазон которого достаточно широк, из переменной типа unsigned long, переменной типа int, с 50%
вероятностью в int будет именно отрицательное значение. Поэтому в примере генератор выдаёт для целевого
массива int и отрицательные значения в том числе.
Правильным решением будет так.
Код: 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.
 #include <iostream>
#include <algorithm>
#include <random>
#include <chrono>
bool cmp(int* s1, int* s2){ return *s1 < *s2; };
template <typename T, typename C>
 size_t func(T s, size_t m, size_t n, C cm){
  T mas[n], tmp;
  size_t p, count=0, sum;
  
 while( m-- > 0){
  p=0; sum=0; 
 while( p < n){ tmp=s+m+p; sum+=*tmp; mas[p++]=tmp; };
  
  std::sort(mas, mas+n, cm );
  sum/=2;
 while(p-- > 0){ 
      
 if( **(mas+p) < sum ) break;
  
 ++count;
     }
   };

 return count;

 };

 struct randm{
 randm(): s(std::chrono::system_clock::now().time_since_epoch().count()), gn(s){};
 unsigned s;
  std::mt19937 gn;
 long unsigned operator()(){ return gn(); }; 
 };

int main(int c, char** arg){
if(c<3) return -1;
 size_t n=std::stoi(arg[1]), m=std::stoi(arg[2]), i=n*m;
  int *s;
try{
  s=new int[i]; }
catch(std::bad_alloc& c){ return -1; };
randm rnd;
while(i>0){ s[--i]=rnd(); };

std::cout<<"Res "<<func(s, n, m, cmp)<<std::endl; 
delete [] s;};
...
Рейтинг: 0 / 0
29.05.2014, 12:56
    #38655662
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
В последнем решении есть ошибка, кто первый найдёт?
...
Рейтинг: 0 / 0
29.05.2014, 13:15
    #38655685
iv_an_ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
smald,

Вот даже не буду грузить список ваших однобуквенных переменных в кэш головного мозга.
Настоящий Программист может написать фортрановскую программу на любом языке
...
Рейтинг: 0 / 0
29.05.2014, 14:36
    #38655845
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
Не нравится мне этот рандом...
...
Рейтинг: 0 / 0
29.05.2014, 15:04
    #38655903
Вася Уткин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
smaldВ последнем решении есть ошибка, кто первый найдёт?
Я нашел функцию main, заняло секунд 10-15, с учетом данного форматирования это успех.
...
Рейтинг: 0 / 0
29.05.2014, 15:07
    #38655914
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
Вася УткинsmaldВ последнем решении есть ошибка, кто первый найдёт?
Я нашел функцию main, заняло секунд 10-15, с учетом данного форматирования это успех.

Подробности, please.
...
Рейтинг: 0 / 0
29.05.2014, 16:49
    #38656132
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
smaldВася Уткинпропущено...

Я нашел функцию main, заняло секунд 10-15, с учетом данного форматирования это успех.

Подробности, please.Возьми любой популярный open source продукт. Посмотри как там оформляются исходные тексты. Возьми другой популярный open source, посмотри как там. Потом сравни с твоим ужасным кодом.
Вот когда ты будешь оформлять свой код красиво и четко - тогда у людей будет желание искать ошибки в твоем тексте, а пока: "что это за мусор? Да пошел он нафиг!"
...
Рейтинг: 0 / 0
29.05.2014, 17:14
    #38656174
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
White Owl
Подробности, please.Возьми любой популярный open source продукт. Посмотри как там оформляются исходные тексты. Возьми другой популярный open source, посмотри как там. Потом сравни с твоим ужасным кодом.
Вот когда ты будешь оформлять свой код красиво и четко - тогда у людей будет желание искать ошибки в твоем тексте, а пока: "что это за мусор? Да пошел он нафиг!"[/quot]

Вот сейчас как выложу примеры из linux kernel, мало не покажется. А по сабжу, человек
заявил, что нашёл ошибку, вот и попросил показать-тишина.
...
Рейтинг: 0 / 0
29.05.2014, 17:35
    #38656210
iv_an_ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
smald,

Вы уж извините, но если писатель не уважает читателей, и заставляет их ломать глаза, то читатели имеют полное право не уважать писателя.
...
Рейтинг: 0 / 0
29.05.2014, 17:39
    #38656212
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
smaldА по сабжу, человек
заявил, что нашёл ошибку, вот и попросил показать-тишина.человек заявил, что он за 15 секунд нашёл в коде функцию main(), читаем посты внимательней ;-))
P.S. я не её не нашёл, есичё ))
...
Рейтинг: 0 / 0
29.05.2014, 19:22
    #38656304
luislom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
egorychP.S. я не её не нашёл, есичё

А то хоть именно не нашли то? Заинтриговали прям.
...
Рейтинг: 0 / 0
29.05.2014, 19:25
    #38656307
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
luislomegorychP.S. я не её не нашёл, есичё

А то хоть именно не нашли то? Заинтриговали прям.функцию main(), ошибку и не искал, глаза не казённые у меня, потому что
...
Рейтинг: 0 / 0
29.05.2014, 21:13
    #38656402
lvanokhina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
Пожалуйста,помогите исправить программу
В моей программе я создаю стек из записей (структур),с данными о каком то студенте.(считывается все из файла
как мне сделать не просто стек,а двунаправленный линейный стек??

(программа написана на СИ и нужно на СИ,а не на СИ++)
структура называется Student

Код: 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.
119.
120.
121.
122.
123.
124.
125.
126.
127.
#include <stdio.h>
#include <string.h>
 
#include <limits.h>
#include <windows.h>
#include <locale>
 
#ifdef Q_OS_WIN32
const char* codecName = "IBM866";
#endif
 
 
 
 
 
#define Lmax 20
#define CLR while(fgetc(f)!='\n')
 
struct Student
{
 
    char Group[Lmax];
    struct
    {
        char Famil[Lmax], Name[Lmax], Otch[Lmax];
                                                        
    }FIO; 
    struct
    {
        int B[Lmax];
    }uspevaemost;
 
    Student *next; //поле указателя на следующую запись
};
//формирование стека стульев. На входе - имя входного файла
 
Student* stack(char _name[])
{
    Student *tek, *stack=NULL; //изначально список пуст
    FILE *f;
    if (!(f=fopen(_name, "r")))
    puts("File not found");
    else
    {
        while(!feof(f))
        {
        tek = new Student;
        if (fgets(tek->Group, Lmax, f))
        {   CLR;
            tek->Group[strlen(tek->Group)-1]='\0';
 
            fgets(tek->FIO.Famil, Lmax, f);
            tek->FIO.Famil[strlen(tek->FIO.Famil)-1]='\0';
 
            fgets(tek->FIO.Name, Lmax, f);
            tek->FIO.Name[strlen(tek->FIO.Name)-1]='\0';
 
            fgets(tek->FIO.Otch, Lmax, f);
            tek->FIO.Otch[strlen(tek->FIO.Otch)-1]='\0';
            
            CLR;
 
            fscanf(f,"%d %d %d %d /n",&tek->uspevaemost.B[0],&tek->uspevaemost.B[1],&tek->uspevaemost.B[2],&tek->uspevaemost.B[3]);
 
            puts("File schitan vec");
 
            tek->next=stack;
            stack=tek;
            }
        }
//delete tek;
}
     puts("File schitan");
return(stack); //возвращается указатель на вершину стека
}
 
 
 
void vivod(Student* stack, char name[]) //вывод списка в файл
{FILE *f2=fopen(name, "w");
if (!stack)
{
fprintf(f2," list after elements removing is empty\n");
}
else
{
fprintf(f2, " list after elements removing\n");
//вывод списка в файл
while(stack!=NULL)
{
fprintf(f2, "Group:%d\n", stack->Group);
fprintf(f2, "Familia:%s\n", stack->FIO.Famil);
fprintf(f2, "Name:%s\n", stack->FIO.Name);
fprintf(f2, "Otchestvo:%s\n", stack->FIO.Otch);
fprintf(f2, "B1:%d\n",stack->uspevaemost.B[0] );
fprintf(f2, "B2:%d\n",stack->uspevaemost.B[1] );
fprintf(f2, "B3:%d\n",stack->uspevaemost.B[2] );
fprintf(f2, "B4:%d\n",stack->uspevaemost.B[3] );
stack=stack->next; //движение по списку
}
}
puts("File sohranen");
fclose(f2);
}
 
 
 
using namespace std;
 
int main()
{
Student *first; //указатель на вершину стека
char name1[Lmax], name2[Lmax]; /* имена входного и
выходного файла */
printf("Input file name: ");
gets(name1);
printf("Output file name: ");
gets(name2);
first=stack(name1); //формирование стека
if (first!=NULL)
{
 
vivod(first, name2); //вывод результата в файл
printf("Results saved in file %s\n", name2);
}
return 0;
}
...
Рейтинг: 0 / 0
30.05.2014, 04:42
    #38656566
smald
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пожалуйста помогите решить задачу зарание спасибо!
lvanokhinaкак мне сделать не просто стек,а двунаправленный линейный стек??


Как понял нужна двунаправленная очередь aka dequeue?
Придётся заводить отдельную структуру, с указателями на начало
списка, на конец списка, и передавать её по указателю в формирующие
функции, которых будет уже несколько. Так примерно структура и прототипы.

Код: 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.
struct node{
   struct node * prev;
   void* ptr;
  struct node* next;

 }; 

struct dequeue{

  struct node* front;
  struct node* back;

  };

typedef struct dequeue ptq;
typedef struct node ndq;

ndq* push_front(ptq*, void*);
ndq* push_back(ptq*, void*);
void* pop_front(ptq*);
void* pop_back(ptq*);
void dequeue_init(ptq*);
void dequeue_erase(ptq*);
void dequeue_clear(ptq*);
ndq* front_iterator(ptq*, ndq*);
ndq* back_iterator(ptq*, ndq*);

ndq*  push_front(ptq* q, void* ptr){

 ndq* p=malloc(sizeof(ndq)); if(!p) return NULL; 
                                                         
 if(!q->front) { q->front=q->back=p;}else{  p->next=q->front;  q->front->prev=p; };
 p->ptr=ptr;
 q->front=p; p->prev=NULL; 
 return p; 

  };

ndq* push_back(ptq* q, void* ptr){  
  
 ndq *tmp, *p=malloc(sizeof(ndq)); if(!p) return NULL; 
                                                         
if( ! q->back ){ q->front=q->back=p; }else{ p->prev=q->back; q->back->next=p; };
 p->ptr=ptr;
  q->back=p; p->next=NULL; 
 return p; 

 };

void* pop_front(ptq* q){  
 
if(! q->front ) return NULL; void* ptr; 
                                                             
 ndq* p=q->front; q->front=q->front->next; 
  
if(q->front) q->front->prev=NULL; 
                                                                
 ptr=p->ptr; free( p ); 
 return ptr; 
 
}; 
 
void* pop_back(ptq* q){  
 if(! q->back ) return NULL; 
 void* ptr; 
                                                  
          
  ndq* p=q->back; q->back=q->back->prev;
 if(q->back) q->back->next=NULL; 
                                                               
  ptr=p->ptr; free( p ); 

 return ptr; 
 
  }; 

ndq*  front_iterator(ptq* q, ndq* p){  ndq* ptr=p; if( !ptr ) ptr=q->back;  return ptr->prev; };

ndq*  back_iterator(ptq* q, ndq* p){  ndq* ptr=p; if( !ptr ) ptr=q->front;  return ptr->next; };
 

void dequeue_init(ptq* q){ q->front=q->back=NULL;  };
 
void dequeue_clear(ptq* q){ 
ndq* p=q->front; 
 if( ! p )  return; 
                                                                          
  while( p ) {  free(p->prev); p=p->next;  };
                                                                                              
  q->front=NULL; q->back=NULL;

  };

void dequeue_erase(ptq* q){ 
ndq* p=q->front; 
 if( ! p ) return; 
                                                                          
  while( p ) { free( p->ptr); free(p->prev); p=p->next;  };
                                                                                              
  q->front=NULL; q->back=NULL;

  };




В приложении можно использовать так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
.....................................................................................................................................................

struct dequeue dqt;
dequeue_init(&dqt);

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


fgets(tek->FIO.Otch, Lmax, f);
            tek->FIO.Otch[strlen(tek->FIO.Otch)-1]='\0';
            
            CLR;
 
            fscanf(f,"%d %d %d %d /n",&tek->uspevaemost.B[0],&tek->uspevaemost.B[1],&tek->uspevaemost.B[2],&tek->uspevaemost.B[3]);
 
            puts("File schitan vec");
 
          if (! insert_front(&dqt, (struct Student*) tek)) error_hand();
            }
        }



Можно гонять туда-сюда

Код: plaintext
1.
2.
3.
struct node ndq=NULL;
int count=0;
while((ndq=back_iterator(&dqt, &ndq)!=NULL){ printf(" Group Num %d  Is %s\n", ndq->ptr->Group); };  
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пожалуйста помогите решить задачу зарание спасибо! / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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