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

Так в чём твоя проблема? Не умеешь посчитать сумму всех элементов столбца матрицы?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пожалуйста помогите решить задачу зарание спасибо!
    #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
Пожалуйста помогите решить задачу зарание спасибо!
    #38655026
alinyshka1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
smald,

у меня random выдает за ошибку
...
Рейтинг: 0 / 0
Пожалуйста помогите решить задачу зарание спасибо!
    #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
Пожалуйста помогите решить задачу зарание спасибо!
    #38655189
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smald,

Занудства ради, такие задачи надо обязательно тестировать на рандоме, который охватит и отрицательные значения. Иначе можно не увидеть, к примеру, массив, в котором все элементы --- особые, или ещё какую интересность.
...
Рейтинг: 0 / 0
Пожалуйста помогите решить задачу зарание спасибо!
    #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
Пожалуйста помогите решить задачу зарание спасибо!
    #38655662
smald
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последнем решении есть ошибка, кто первый найдёт?
...
Рейтинг: 0 / 0
Пожалуйста помогите решить задачу зарание спасибо!
    #38655685
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smald,

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

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

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

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

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

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

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

А то хоть именно не нашли то? Заинтриговали прям.функцию main(), ошибку и не искал, глаза не казённые у меня, потому что
...
Рейтинг: 0 / 0
Пожалуйста помогите решить задачу зарание спасибо!
    #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
Пожалуйста помогите решить задачу зарание спасибо!
    #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
20 сообщений из 20, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пожалуйста помогите решить задачу зарание спасибо!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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