Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с разделяемой памятью 
:(
    Опции темы
denisovstas
Дата 21.5.2012, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 19.5.2012

Репутация: нет
Всего: нет



Работа с разделяемой памятью. Программа в каждой строке матрицы выводить минимальный (Min), максимальный(Max) элементы. Дальше, эти элементы она соединяет в один и выводит как вектор ("Stroka"). С этим проблем нет, а вот с указателями и со structmem все время ошибки. 
Нужно вывести эту строку (min+max) используя указатель.


Код

#include <stdio.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>

struct mymem{
int e[4];
int y;
}  *mem_e;

int main(){
int k=4; n=5;
int l=8;
int min[k];
int max[k];
int e[k];
int b[k];
int c[k];
int x[4][5]={{2,3,4,7,0},{5,4,3,2,1},{5,6,7,8,3},{4,8,6,7,9}};
int i,j;

int shmid=shmget(IPC_PRIVATE,2,IPC_CREAT|0666);
  if(shmid<0){
    fprintf(stdout,"Error\n");
    return 0;    
  }
mem_e=(mymem*)shmat(shmid,NULL,0);
int pid;
pid=fork();
if(pid==0){
//Min
 for(i=0;i<k;i++)
 {
 min[i]=x[i][0];
 for (j=0; j<n;j++)
 {
 if (x[i][j]<min[i])
 min[i]=x[i][j];
 }}
 // Max
 for (i=0;i<k;i++){
 max[i]=x[i][0];
 for (j=0; j<n;j++)
 {
 if (x[i][j]>max[i])
 max[i]=x[i][j];
 }}
 // max+min
 for(i=0; i<k;i++)
 {
 b[i]=max[i];
 }
 for(i=0;i<k;i++)
 {
 c[i]=min[i];
 }
 for(i=0; i<l; i++){
 e[i]=(i<k?c[i]:b[i-k]);}
 mem_e->e[y]=e[i];
 }
 
 if (pid!=0){
 //Min
 for(i=0;i<k;i++)
 {
 min[i]=x[i][0];
 for (j=0; j<n;j++)
 {
 if (x[i][j]<min[i])
 min[i]=x[i][j];
 }}
 // Max
 for (i=0;i<k;i++){
 max[i]=x[i][0];
 for (j=0; j<n;j++)
 {
 if (x[i][j]>max[i])
 max[i]=x[i][j];
 }}
 // max+min
 for(i=0; i<k;i++)
 {
 b[i]=max[i];
 }
 for(i=0;i<k;i++)
 {
 c[i]=min[i];
 }
 for(i=0; i<l; i++){
 e[i]=(i<k?c[i]:b[i-k]);
 }
 mem_e->e[y]=e[i];
 }
 wait(NULL);
 //Vyvid massiva
 for(i=0; i<k;i++)
 {
 printf("\n";
 for(j=0; j<n;j++)
 { printf("x[%d][%d]= %d", i,j,x[i][j]);}
 }
 printf("\n");
 // Vyvod na ekran min
  for(i=0; i<k;i++) {
  printf("%d\n", min[i]);
  }
  // Vyvod na ekran max
  for(i=0; i<k;i++){
  printf("%d\n", max[i]);
  }
  
  //Vyvod max+min
  printf("Stroka\n");
  fprintf(stdout,"%d\n", mem_e->e[i]);
  }
  return 1;
  }

 
PM MAIL   Вверх
rsm
Дата 23.5.2012, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



Для начала предлагаю добиться чтобы код хотя бы просто компилировался.
PM MAIL   Вверх
denisovstas
Дата 23.5.2012, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 19.5.2012

Репутация: нет
Всего: нет



код уже компилируется, но прога выводит сообщение Error, то есть выполняется условие

Код

int shmid=shmget(IPC_PRIVATE,2,IPC_CREAT|0666);
  if(shmid<0){
    fprintf(stdout,"Error\n");
    return 0;   
  }


Обновленный код:

Код

#include <stdio.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
 
struct mymem{
int mas[4];
int i[4];
}  *mem_e;
 
int main(){
int k=4; n=5;
int l=8;
int min[k];
int max[k];
int e[k];
int b[k];
int c[k];
int x[4][5]={{2,3,4,7,0},{5,4,3,2,1},{5,6,7,8,3},{4,8,6,7,9}};
int i,j;
 
int shmid=shmget(IPC_PRIVATE,2,IPC_CREAT|0666);
  if(shmid<0){
    fprintf(stdout,"Error\n");
    return 0;   
  }
 
mem_e=(mymem*)shmat(shmid,NULL,0);
int pid;
pid=fork();
 
if(pid==0){
 
//Min
 for(i=0;i<k;i++)
 {
 min[i]=x[i][0];
 for (j=0; j<n;j++)
 {
 if (x[i][j]<min[i])
 min[i]=x[i][j];
 }}
 
 // Max
 for (i=0;i<k;i++){
 max[i]=x[i][0];
 for (j=0; j<n;j++)
 {
 if (x[i][j]>max[i])
 max[i]=x[i][j];
 }}
 
 // max+min
 for(i=0; i<k;i++)
 {
 b[i]=max[i];
 }
 for(i=0;i<k;i++)
 {
 c[i]=min[i];
 }
 
 for(i=0; i<l; i++){
 e[i]=(i<k?c[i]:b[i-k]);
 mem_e->mas[i]=e[i];}
 }
 
 if (pid!=0){
 
 //Min
 for(i=0;i<k;i++)
 {
 min[i]=x[i][0];
 for (j=0; j<n;j++)
 {
 if (x[i][j]<min[i])
 min[i]=x[i][j];
 }}
 
 // Max
 for (i=0;i<k;i++){
 max[i]=x[i][0];
 for (j=0; j<n;j++)
 {
 if (x[i][j]>max[i])
 max[i]=x[i][j];
 }}
 
 // max+min
 for(i=0; i<k;i++)
 {
 b[i]=max[i];
 }
 for(i=0;i<k;i++)
 {
 c[i]=min[i];
 } 
 for(i=0; i<l; i++){
 e[i]=(i<k?c[i]:b[i-k]);
 
 mem_e->mas[i]=e[i];}
 }
 wait(NULL);
 
 //Vyvod massiva
 for(i=0; i<k;i++)
 {
 printf("\n";
 for(j=0; j<n;j++)
 { printf("x[%d][%d]= %d", i,j,x[i][j]);}
 }
 printf("\n");
 
 // Vyvod na ekran min
  for(i=0; i<k;i++) {
  printf("%d\n", min[i]);
  }
 
  // Vyvod na ekran max
  for(i=0; i<k;i++){
  printf("%d\n", max[i]);
  }
  
  //Vyvod max+min
  printf("Stroka\n");
  fprintf(stdout,"%d\n", mem_e->mas[i]);
  }
  return 1;
  }

PM MAIL   Вверх
rsm
Дата 24.5.2012, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



Цитата(denisovstas @  23.5.2012,  20:50 Найти цитируемый пост)
код уже компилируется

"Не верю!" © smile
Даже невооружённым глазом видно как минимум 4 критических ошибки синтаксиса, из-за которых код в принципе не может быть скомпилирован.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.