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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2010, 00:52   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение виды спорта(списки)

Состав спортивного соревнования с разбивкой по видам спорта. Количества видов спорта и участников каждого вида спорта переменны. Для фрагмента модели, являющегося одномерным списком, составить модуль формирования нового списка спортсменов, содержащего фамилии каждого второго спортсмена.

Как это сделать?

Код:
struct spis{
    char c[20];// вид спорта
	int size;
    spis *next;
}*p,*cur,*prev,*top;

void push(int n);
void show();
	
void main()
{
	int n;
	printf("razmer:\n");scanf("%i",&n);
    top=0;
	push(n);
	show();
	getch();
}
void push(int n)
{
	printf("Input some sport and size:\n");
	for(;n;n--)
{
	p=new spis;
	printf("[%i]sport and size:\n",n);
	scanf("%s",&p->c);
	scanf("\n%i",&p->size);
p->next=NULL;
if(top==NULL) top=p;
cur=top;
prev=NULL;
while(cur && p->c > cur->c && p->size>cur->size)
{
	prev=cur;
	cur=cur->next;
}
if(cur==NULL) prev->next=p;
else if(prev)
{
	p->next=cur;
	prev->next=p;
}
else
{
	top=p;
	p->next=top==cur?NULL:cur;
}
}
}
void show()
{
	p=top;
	if(p==NULL)
		printf("\n Spisok is empty\n");
	else
		printf("\nSpisok^^:\n");
	while(p){
		printf("%2s %4i\n",p->c,p->size);
		p=p->next;
	}
}
zhenya.ya вне форума Ответить с цитированием
Старый 14.04.2010, 08:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ох не нравится мне твой код... Он у тебя компилируется без ошибок?
Я бы делал так:
Код:
// 2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


struct spis{
    char c[20];// вид спорта
	int size;
    spis *next;
}*p,*cur,*prev,*top;

void push(int n);
void show(spis *l);

spis *ns(spis *old){
 spis *ret=new spis;
 //ret=old;
 cur=ret;
 p=old;
 	 	*cur->c=*p->c;
	 	cur->size=p->size;
 int i=1;
 while (p!=NULL){
	 if(i%2==0){
	 	cur->next=new spis;
	 	cur=cur->next;
	 	*cur->c=*p->c;
	 	cur->size=p->size;
		cur->next=NULL;
	 }
	 p=p->next;i++;
 }
 return ret;
}

int _tmain(int argc, _TCHAR* argv[])
{
		int n;
	printf("razmer:\n");scanf("%i",&n);
    top=0;
	push(n);
	show(top);
	show(ns(top));
	getchar();getchar();

	return 0;
}


void push(int n)
{
	printf("Input some sport and size:\n");
    top=new spis;
	p=top;
	for(;n;n--){
	 printf("[%i]sport and size:\n",n);
	 //scanf("%s",&p->c);
	 //scanf("\n%i",&p->size);
	 p->size=n;
	 cur=p;
	 p=new spis;
	 p->next=NULL;
	 cur->next=p;
	}
}
void show(spis *l)
{
	p=l;
	if(p==NULL)
		printf("\n Spisok is empty\n");
	else
		printf("\nSpisok^^:\n");
	while(p!=NULL){
		printf("%2s %4i\n",p->c,p->size);
		p=p->next;
	}
}
Тут только подмарафеть ns - функция формирующая новый список, она лишний раз берет верхушку.
I'm learning to live...

Последний раз редактировалось Stilet; 14.04.2010 в 09:01.
Stilet вне форума Ответить с цитированием
Старый 14.04.2010, 12:15   #3
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение

Зачем жы Вы так сложно написали ^^
как-то я не совсем прочувствовал Ваш код.
как работает эта хрень: spis *ns(spis *old){...
Выкидывает ошибку о многократноопредеоенном символе
zhenya.ya вне форума Ответить с цитированием
Старый 14.04.2010, 12:49   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вроде не сложно... Ничего лишнего кажись...
Цитата:
эта хрень
Это не "хрень" а функция, которая создает новый список, проходя по старому, и выбирая из него четные записи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.04.2010, 18:31   #5
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

show(ns(top)); как это работает?
И еще:
у меня при выводе выдает сначало правильно, но потом что-то не то:
т.е. я ввожу, к примеру, 2 вида и 2 кал-во луюдей в них. В итоге:
спорт1 5;
спрот2 7;
=============== -842150.... (чета такое)

спорт1 5;
============ 1
zhenya.ya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
виды bios bnv Компьютерное железо 4 21.06.2009 12:36
различные виды переопределения свойств Dawystrik Помощь студентам 5 20.03.2009 12:52
Виды манипуляций с процессом, из DLL Ivan_32 Win Api 3 09.10.2008 08:38