Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
blackw00d
0 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 8
#1

Динамическая память - C++

09.12.2008, 13:05. Просмотров 2081. Ответов 4
Метки нет (Все метки)

Народ, если кому не сложно помогите переделать вот эту программу со структурами
нужно сделать так чтобы для хранения данных она использовала динамическую память вот программа:


Код
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

struct event{
  char name[10];
  int year;
  int month;
  int day;
  int hn;
  int mn;
  int hk;
  int mk;
};

struct event s[25];
int n;

void input(struct event *a){
  printf("vvedite meropriatie: ");
  scanf("%s",&a->name);
  printf("vvedite deni: ");
  scanf("%i",&a->day);
  printf("vvedite mecyz: ");
  scanf("%i",&a->month);
  printf("vvedite god: ");
  scanf("%i",&a->year);
  printf("vvedite chas nachala: ");
  scanf("%i",&a->hn);
  printf("vvedite minuty nachala: ");
  scanf("%i",&a->mn);
  printf("vvedite chas konca: ");
  scanf("%i",&a->hk);
  printf("vvedite minuty konca: ");
  scanf("%i",&a->mk);
  printf("\n");
}

void output(struct event *a){
  printf("%s\t%i\t%i\t%i\t%i\t%i\t%i\t%i\n",(*a).name,(*a).day,(*a).month,(*a).year,(*a).hn,(*a).mn,(*a).hk,(*a).mk);
}


int vvod(struct event *a,int f){
struct event t;
int i,j,k,l;

  printf("\n1 - Cozdati novuy zapisi\n");
  printf("2 - Obnovit suchestvuuchuu\n");
  scanf("%i",&j);
  if (j==1){
    do{
      clrscr();
      printf("vvedite kol-vo meropriatiy(<25): \n\n");
      scanf("%i",&f);
    }while ((f<1) && (f>25));
    for(i=0;i<f;i++)
    input(&a[i]);
  }
  if (j==2){
    printf("\n1 - dobavit zapis\n");
    printf("\n2 - udaliti zapis\n");
    scanf("%i",&k);
    if (k==1){
      input(&a[f]);
      f++;
    }
    if (k==2){
      printf("nomer zapisi");
      scanf("%i",&l);
      for(i=l-1;i<f-1;i++){
	t=a[i];
	a[i]=a[i+1];
	a[i+1]=t;
      }
      f--;
    }
  }
  return f;
}

void vyvod(struct event *a,int f){
int i;

  printf("meropriatie\tdata\t      vremy nachala\tvremy konca\n\n");
  for(i=0;i<f;i++)
    output(&a[i]);
  getch();
}


void sortvn(struct event *a,int f){
int i,j;
struct event t;

  for(i=0;i<f-1;i++){
    for(j=i+1;j<f;j++){
      if ((a[i].hn>a[j].hn) || ((a[i].mn>a[j].mn) && (a[i].hn==a[j].hn))){
	t=a[i];
	a[i]=a[j];
	a[j]=t;
      }
    }
  }
}

void sortvk(struct event *a,int f){
int i,j;
struct event t;

  for(i=0;i<f-1;i++){
    for(j=i+1;j<f;j++){
      if ((a[i].hk>a[j].hk) || ((a[i].mk>a[j].mk) && (a[i].hk==a[j].hk))){
	t=a[i];
	a[i]=a[j];
	a[j]=t;
      }
    }
  }
}

void peresek(struct event *a,int f){
int i,j;

  printf("\nperesekauchiesia zapisi\n");
  for(i=0;i<f-1;i++){
    for(j=i+1;j<f;j++){
      if ((a[i].name==a[j].name) || (a[i].year==a[j].year) || (a[i].month==a[j].month) || (a[i].day==a[j].day) || (a[i].hn==a[j].hn) || (a[i].mn==a[j].mn) || (a[i].hk==a[j].hk) || (a[i].mk==a[j].mk)){
	output(&a[i]);
	output(&a[j]);
	printf("\n");
      }
    }
  }
  getch();
}

void maxtime(struct event *a,int f){
int i,j,s,d;
long int max,maxi;
struct event t;

  for(i=0;i<f-1;i++){
    for(j=i+1;j<f;j++){
      if ((a[i].year>a[j].year) || ((a[i].year==a[j].year) && (a[i].month>a[j].month)) || ((a[i].year==a[j].year) && (a[i].month==a[j].month) && (a[i].day>a[j].day))){
	t=a[i];
	a[i]=a[j];
	a[j]=t;
      }
    }
  }
  max=0;
  s=i;
  d=i;
  for(i=0;i<f-1;i++){
    for(j=i+1;j<f;j++){
      maxi=(a[j].year-a[i].year)*8760l+(a[j].month-a[i].month)*744l+(a[j].day-a[i].day);
      if (max<maxi){
	max=maxi;
	s=i;
	d=j;
      }
    }
  }
  output(&a[s]);
  output(&a[d]);
  printf("%i chas(ov)",abs(max));
  getch();
}

void in_file(struct event *a)
{
FILE *f;
char fn[50];
char *c;
int i;
  printf("vvedite imy file ");
  scanf("%s",fn);
  f=fopen(fn,"wb");
  if (!f)
    printf("Oshibka otkritiya faila %s\n",fn);
  else{
    rewind(f);
    c=(char *)a;
    for(i=0;i<sizeof(s);i++)
      putc(*c++,f);
  }
  fclose(f);
}

int from_file(struct event *a)
{
FILE *f;
char fn[50];
char *c;
int i;
  printf("vvedite imy file ");
  scanf("%s",fn);
  f=fopen(fn,"rb");
  if (!f){
    printf("Oshibka otkritiya faila %s\n",fn);
    getch();
  }else{
    c=(char *)a;
    for(i=0;i<sizeof(s);i++){
      if((*c=getc(f))!=EOF) c++;
      else fclose(f);
    }
  }

  for(i=0,n=0;i<25;i++){
    if (strlen(a[i].name)!=0 && a[i].year!=0 && a[i].month!=0 && a[i].day!=0 && a[i].hn!=0 && a[i].hk!=0 && a[i].mn!=0 && a[i].mk!=0){
    n++;
    }
  }
  return n;
}

void main(void){
int v;

  while(1){
    clrscr();
    printf("\n1. vvod dannih\n");
    printf("2. sortirovka po vremeny nachala\n");
    printf("3. sortirovka po vremeny okonchania\n");
    printf("4. poisk perekryvauchihsy zapisei\n");
    printf("5. poisk max nezanytogo promegutka vremeni\n");
    printf("6. vyvod dannih\n");
    printf("7. zapis v file\n");
    printf("8. chtenie U3 file\n");
    printf("9. VIHOD\n");
    printf("\n viberete deistvie:");
    scanf("%i",&v);
    switch (v){
      case 1:{n=vvod(s,n);break;}
      case 2:{sortvn(s,n);break;}
      case 3:{sortvk(s,n);break;}
      case 4:{peresek(s,n);break;}
      case 5:{maxtime(s,n);break;}
      case 6:{vyvod(s,n);break;};
      case 7:{in_file(s);break;};
      case 8:{from_file(s);break;};
      case 9:{exit(1);}
    }
  }
}
Помогите плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2008, 13:05     Динамическая память
Посмотрите здесь:

C++ Указатели. Динамическая память.
C++ Стек и динамическая память
Указатели.Динамическая память. C++
Динамическая память и массивы C++
C++ Динамическая память и строки
C++ строки и динамическая память
Динамическая память new, delete C++
Динамическая память C++
Деструктор и динамическая память C++
C++ Динамическая память массивы
Указатели и динамическая память C++
C++ Указатели и динамическая память

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.12.2008, 13:14     Динамическая память #2
Сам что-нибудь пробовал? Используй malloc, например...
blackw00d
0 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 8
09.12.2008, 13:21  [ТС]     Динамическая память #3
Пробовал, но не понял как пользоваться, не получается. Или сохраняет не правильно или считывает из файла косяченно. Можешь написать куда этот малок пихать.
Vourhey
Почетный модератор
6473 / 2248 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.12.2008, 13:28     Динамическая память #4
Туда, где ты собираешься память выделять. Эта функция в качестве параметра берет объем выделяемой памяти. На форуме есть примеры ее использования.
blackw00d
0 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 8
09.12.2008, 16:10  [ТС]     Динамическая память #5
спасибо, попробую
Yandex
Объявления
09.12.2008, 16:10     Динамическая память
Ответ Создать тему
Опции темы

Текущее время: 12:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru