Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2014, 12:37   #1
unkname
 
Регистрация: 23.03.2014
Сообщений: 5
По умолчанию c++ структуры+массивы

Добрый день, помогите сформировать массив записей, описывающих следующую таблицу:
---------------------------------------------------------------
Фамилия ! Адрес ! N телефона
--------------------------------------------------------------

Удалить из массива тех абонентов, телефон которых начинается
с цифры 3. Скорректированный массив вывести в прежней форме.

Хотя бы подскажите как реализовать 2ю часть программы? Заранее спасибо!
unkname вне форума Ответить с цитированием
Старый 23.03.2014, 12:53   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Какие-либо самостоятельные попытки справиться с задачей были?
Streletz вне форума Ответить с цитированием
Старый 23.03.2014, 12:57   #3
unkname
 
Регистрация: 23.03.2014
Сообщений: 5
По умолчанию

Код:
	#include "stdafx.h"
	#include "iostream"
	#include "conio.h"


	using namespace std;

	struct Adr	
	{
		char ul[40]; 		
		unsigned dom;		
		unsigned kv;
	};

	struct Abonent 
	{
		char fio[40];
		unsigned phone;
		Adr a_proj;
	};

	Abonent vvod_struc(int i);
	void wr_struc (Abonent a);

	int main()
	{
	
	Abonent *p;
    Abonent list [100]={"Ivanov I. I.",234456,"Sozidatelej",3,144, "Petrov I. I.",432451,"Karbysheva",4,423};
	p=list+2;   		  
	strncpy(p->fio,"Petrova O. A.",40);
	p->phone=212435; 	
	p->a_proj.ul="Typoleva";
	p->a_proj.dom=4;
	p->a_proj.kv=234;
	for(int i = 3; i < 5; i++)
	{ 	
		list[i]=vvod_struc(i);
	};
		cout << "\nlist of structs\n!      fio     !  phone  !\n";
Была, но не совсем уверен, что правильно
unkname вне форума Ответить с цитированием
Старый 23.03.2014, 13:16   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Возможно подобный код поможет разобраться.
Код:
#include <stdio.h>

// односвязный список структур abonent
// строки нуль-терминированные (так определяем размер)

struct abonent
{
char* family;
char* address;
char* phone;
struct abonent* next;

abonent() { family = NULL; address = NULL; phone = NULL; next = NULL; }
abonent(char* a, char* b, char* c) { family = a; address = b; phone = c; next = NULL;}
void print_family()  { int i; for (i=0; family[i]!='\0'; i++) printf("%c", family[i]); printf("\n");}
void print_address() { int i; for (i=0; address[i]!='\0'; i++) printf("%c", address[i]); printf("\n"); }
void print_phone() { int i; for (i=0; phone[i]!='\0'; i++) printf("%c", phone[i]); printf("\n"); }
void add_next(char *a, char *b, char* c) { next = new abonent(a,b,c); }
void print() { print_family(); print_address(); print_phone(); }


int check_condition() { if (phone[0] == '3') return 1; return 0;}

};


void print_abonent_list(struct abonent* f) { struct abonent* iterator = f; while (iterator->next != 0) { iterator->print(); iterator = 

iterator->next;} iterator->print(); }



struct abonent* delete_abonent_list(struct abonent* f)
{
int is_first, result; struct abonent *iterator, *return_element, *temp;

iterator = f; is_first = 1; temp = NULL;

while (iterator->next != 0)
{
result = iterator->check_condition();

if (result && is_first) { return_element = iterator->next; temp = iterator;  }
else if (result && is_first == 0) { temp = iterator; }
else { is_first = 0; }

iterator = iterator->next;

if (temp) delete temp;

temp = NULL;
}

result = iterator->check_condition();
if (result && is_first) { return_element = 0; delete iterator;  }
else if (result && is_first == 0) { delete iterator; }

return return_element;
}

int main()
{

struct abonent* s = new struct abonent("Alexander\0", "Krasnih Madiar, 55\0", "89526103195\0");
struct abonent* first;

first = s; 

print_abonent_list(first);

first = delete_abonent_list(first);

// нужно удалить данные

//first->print();




return 0;
}
добавлено:
Массив лучше организовывать в форме списка, односвязного или двусвязного.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 13.04.2014, 18:15   #5
unkname
 
Регистрация: 23.03.2014
Сообщений: 5
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Возможно подобный код поможет разобраться.
Код:
#include <stdio.h>

// односвязный список структур abonent
// строки нуль-терминированные (так определяем размер)

struct abonent
{
char* family;
char* address;
char* phone;
struct abonent* next;

abonent() { family = NULL; address = NULL; phone = NULL; next = NULL; }
abonent(char* a, char* b, char* c) { family = a; address = b; phone = c; next = NULL;}
void print_family()  { int i; for (i=0; family[i]!='\0'; i++) printf("%c", family[i]); printf("\n");}
void print_address() { int i; for (i=0; address[i]!='\0'; i++) printf("%c", address[i]); printf("\n"); }
void print_phone() { int i; for (i=0; phone[i]!='\0'; i++) printf("%c", phone[i]); printf("\n"); }
void add_next(char *a, char *b, char* c) { next = new abonent(a,b,c); }
void print() { print_family(); print_address(); print_phone(); }


int check_condition() { if (phone[0] == '3') return 1; return 0;}

};


void print_abonent_list(struct abonent* f) { struct abonent* iterator = f; while (iterator->next != 0) { iterator->print(); iterator = 

iterator->next;} iterator->print(); }



struct abonent* delete_abonent_list(struct abonent* f)
{
int is_first, result; struct abonent *iterator, *return_element, *temp;

iterator = f; is_first = 1; temp = NULL;

while (iterator->next != 0)
{
result = iterator->check_condition();

if (result && is_first) { return_element = iterator->next; temp = iterator;  }
else if (result && is_first == 0) { temp = iterator; }
else { is_first = 0; }

iterator = iterator->next;

if (temp) delete temp;

temp = NULL;
}

result = iterator->check_condition();
if (result && is_first) { return_element = 0; delete iterator;  }
else if (result && is_first == 0) { delete iterator; }

return return_element;
}

int main()
{

struct abonent* s = new struct abonent("Alexander\0", "Krasnih Madiar, 55\0", "89526103195\0");
struct abonent* first;

first = s; 

print_abonent_list(first);

first = delete_abonent_list(first);

// нужно удалить данные

//first->print();




return 0;
}
добавлено:
Массив лучше организовывать в форме списка, односвязного или двусвязного.
да уж, написано так, что это с трудом читается=)
unkname вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы и структуры nasty_sher Помощь студентам 1 28.12.2012 11:57
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Массивы, структуры, на С++ andygarcia86 Помощь студентам 0 18.10.2011 16:04
структуры и массивы Dossym Помощь студентам 1 27.02.2010 19:30
структуры и массивы Dossym Помощь студентам 2 27.02.2010 19:18