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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2007, 09:41   #1
Panterka
Пользователь
 
Аватар для Panterka
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию Создание программы в С++

Задание следующие: "Имеется несколько шашек (не более 80) разного цвета, программа должна запросить:
- число цветов
- кол-во шашек;
и выдать сообщение о их расположению по кругу, так чтобы рядом не стояли шашки одного цвета, в случае положительного ответа программа должна вывести строки цветов(т.е. раположение шашек по цветам). " Может у кого-то попадалось что-то похожее, помогите пожалуйсто.

Последний раз редактировалось Panterka; 21.12.2007 в 11:53.
Panterka вне форума Ответить с цитированием
Старый 21.12.2007, 12:09   #2
Panterka
Пользователь
 
Аватар для Panterka
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию

Может быть у кого-то просто есть какие-нибудь варианты создания этой программой, поделитесь пожалуйсто.
Panterka вне форума Ответить с цитированием
Старый 21.12.2007, 15:31   #3
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Пусть фишек 1го цвета у нас больше всего, и далее по номерам количество идёт по убыванию (без ограничения общности цвета можно поменять местами).

Нельзя расположить нужным образом тогда, когда фишек 1го цвета больше, чем остальных в сумме. (доказательство до неприличного просто)

Если меньше или равно, то сделаем так. Выложим в ряд фишки 1го цвета (1111....11), потом после каждой добавим по фишке другого цвета (это можно сделать, т. к. их больше) (121213131314....1n) Пусть у нас остались фишки начиная с k-го цвета. Тогда выложим по 1й фишке k-го цвета после 2, (k+1)го цвета после 3 и т.п. Это сделать можно, т. к. (k+m)-ых фишек меньше, чем (m+1)-ых. Так же раскладываем оставшиеся. Вуаля )))
theos вне форума Ответить с цитированием
Старый 21.12.2007, 16:27   #4
Panterka
Пользователь
 
Аватар для Panterka
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию

Цитата:
Сообщение от theos Посмотреть сообщение
... Вуаля )))
Спасибки, теперь осталось это реализовать в программку, давайте попробуем это сделать. Всевместе что-нибудь создадим.

Последний раз редактировалось Panterka; 21.12.2007 в 16:31.
Panterka вне форума Ответить с цитированием
Старый 21.12.2007, 18:16   #5
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Короче вот )))

Код:
#include <stdio.h>
#include <stdlib.h>

template<class T>
void swap(T& a, T& b)
{
	a = a + b;
	b = a - b;
	a = a - b;
}

// пузырьком
void sort_lk(int* by,int* l, int n)
{
	int i,j;
	for(i = 0;i < n;i++)
	 for(j = 1;j < n;j++)
	  if(by[j] > by[j-1])
	   {
		swap(by[j], by[j-1]);
		swap(l[j], l[j-1]);
	   }
}

void insert(int *m, int n, int to, int elem)
{
//	printf("ins %d to %d\n", elem, to);
	int i;
	for(i = n - 1; i >= to; i--)
		m[i+1] = m[i];
	m[to] = elem;
}

int main()
{
	int cl;
	int i, j;
	int *count, *cname;
	int *res, total;

	// получение инфы
	printf("Enter color count:");
	scanf("%d",&cl);
	if(cl < 1) return 0;

	count = (int*)malloc(cl*sizeof(int));
	cname = (int*)malloc(cl*sizeof(int));
	for(i = 0;i < cl;i++)
	{
		printf("Enter chips' count for color '%d':", i + 1);
		do scanf("%d", count + i); while(count[i] < 0);
		cname[i] = i + 1;
	}
	
	sort_lk(count, cname, cl);

	// определение возможности размещения
	j = 0;
	for(i = 1; i < cl; i++)
	{
		j += count[i];
	}

	total = count[0] + j;

	printf("Total chips: %d\n", total);
	
	if(j < count[0])
	{
		printf("\nImposible!\n");
		free(count);
		free(cname);
		return(0);
	}

	res = (int*)malloc(total*sizeof(int));

	j = 1;

	while(count[0] > 0)
	{
		insert(res,total,0,cname[j]);
		insert(res,total,0,cname[0]);
		count[0]--;
		count[j]--;
		if(count[j] < 1) j++;
	}

	while(j < cl)
	{
		for(i = 1;res[i] == cname[j] || res[i-1] == cname[j];i++);
		insert(res, total, i, cname[j]); 
		count[j]--;
		if(count[j] < 1) j++;
	}

	printf("\nResult: ");
	for(i = 0;i < total;i++)
		printf("%d ",res[i]);

	printf("\n");

	free(res);
	free(count);
	free(cname);

	return(0);
}
theos вне форума Ответить с цитированием
Старый 22.12.2007, 15:06   #6
Panterka
Пользователь
 
Аватар для Panterka
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию

Цитата:
Сообщение от theos Посмотреть сообщение
Короче вот )))
Большое спасибо!!!
Panterka вне форума Ответить с цитированием
Старый 22.12.2007, 18:12   #7
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Да кстати, это с задержкой:

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

template<class T>   
void swap(T& a, T& b)   
{  
    a = a + b;  
    b = a - b;  
    a = a - b;  
}  
  
// пузырьком   
void sort_lk(int* by,int* l, int n)   
{  
    int i,j;  
    for(i = 0;i < n;i++)  
     for(j = 1;j < n;j++)  
      if(by[j] > by[j-1])  
       {  
        swap(by[j], by[j-1]);  
        swap(l[j], l[j-1]);  
       }  
}   
  
void insert(int *m, int n, int to, int elem)   
{  
//  printf("ins %d to %d\n", elem, to);  
    int i;  
    for(i = n - 1; i >= to; i--)  
        m[i+1] = m[i];  
    m[to] = elem;  
}  
  
int main()   
{  
    int cl;  
    int i, j;  
    int *count, *cname;  
    int *res, total;  
 
    // получение инфы  
    printf("Enter color count:");  
    scanf("%d",&cl);  
    if(cl < 1) return 0;  
 
    count = (int*)malloc(cl*sizeof(int));  
    cname = (int*)malloc(cl*sizeof(int));  
    for(i = 0;i < cl;i++)  
    {  
        printf("Enter chips' count for color '%d':", i + 1);  
        do scanf("%d", count + i); while(count[i] < 0);  
        cname[i] = i + 1;  
    }  
       
    sort_lk(count, cname, cl);   
  
    // определение возможности размещения   
    j = 0;   
    for(i = 1; i < cl; i++)   
    {  
        j += count[i];  
    }  
  
    total = count[0] + j;   
  
    printf("Total chips: %d\n", total);   
       
    if(j < count[0])   
    {  
        printf("\nImposible!\n");  
        free(count);  
        free(cname);  
        getch();
        return(0);  
    }  
  
    res = (int*)malloc(total*sizeof(int));   
  
    j = 1;   
  
    while(count[0] > 0)   
    {  
        insert(res,total,0,cname[j]);  
        insert(res,total,0,cname[0]);  
        count[0]--;  
        count[j]--;  
        if(count[j] < 1) j++;  
    }  
  
    while(j < cl)   
    {  
        for(i = 1;res[i] == cname[j] || res[i-1] == cname[j];i++);  
        insert(res, total, i, cname[j]);   
        count[j]--;  
        if(count[j] < 1) j++;  
    }  
  
    printf("\nResult: ");   
    for(i = 0;i < total;i++)   
        printf("%d ",res[i]);   
  
    printf("\n");   
  
    free(res);   
    free(count);   
    free(cname);   
    getch();
    return(0);   
}
theos вне форума Ответить с цитированием
Старый 22.12.2007, 18:15   #8
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

А это с выводом в файл:

Код:
#include <stdio.h>   
#include <stdlib.h>   
  
template<class T>   
void swap(T& a, T& b)   
{  
    a = a + b;  
    b = a - b;  
    a = a - b;  
}  
  
// пузырьком   
void sort_lk(int* by,int* l, int n)   
{  
    int i,j;  
    for(i = 0;i < n;i++)  
     for(j = 1;j < n;j++)  
      if(by[j] > by[j-1])  
       {  
        swap(by[j], by[j-1]);  
        swap(l[j], l[j-1]);  
       }  
}   
  
void insert(int *m, int n, int to, int elem)   
{  
//  printf("ins %d to %d\n", elem, to);  
    int i;  
    for(i = n - 1; i >= to; i--)  
        m[i+1] = m[i];  
    m[to] = elem;  
}  
  
int main()   
{  
    int cl;  
    int i, j;  
    int *count, *cname;  
    int *res, total;
    FILE *f;
    char filename[32];
 
    // получение инфы  
    printf("Enter color count:");  
    scanf("%d",&cl);  
    if(cl < 1) return 0;  
 
    count = (int*)malloc(cl*sizeof(int));  
    cname = (int*)malloc(cl*sizeof(int));  
    for(i = 0;i < cl;i++)  
    {  
        printf("Enter chips' count for color '%d':", i + 1);  
        do scanf("%d", count + i); while(count[i] < 0);  
        cname[i] = i + 1;  
    }  
       
    sort_lk(count, cname, cl);   
  
    // определение возможности размещения   
    j = 0;   
    for(i = 1; i < cl; i++)   
    {  
        j += count[i];  
    }  
  
    total = count[0] + j;   
  
    printf("Total chips: %d\n", total);   

    printf("Enter filename for output:");
    scanf("%31s", filename);
    f = fopen(filename,"w");
       
    if(j < count[0])   
    {  
        fprintf(f,"\nImposible!\n");  
        free(count);  
        free(cname);  
        return(0);  
    }  
  
    res = (int*)malloc(total*sizeof(int));   
  
    j = 1;   
  
    while(count[0] > 0)   
    {  
        insert(res,total,0,cname[j]);  
        insert(res,total,0,cname[0]);  
        count[0]--;  
        count[j]--;  
        if(count[j] < 1) j++;  
    }  
  
    while(j < cl)   
    {  
        for(i = 1;res[i] == cname[j] || res[i-1] == cname[j];i++);  
        insert(res, total, i, cname[j]);   
        count[j]--;  
        if(count[j] < 1) j++;  
    }  
  
    fprintf(f,"Result: ");   
    for(i = 0;i < total;i++)   
        fprintf(f,"%d ",res[i]);   
  
    fprintf(f,"\n");   
  
    free(res);   
    free(count);   
    free(cname);   
    fclose(f);
    return(0);   
}
theos вне форума Ответить с цитированием
Старый 24.12.2007, 10:08   #9
Panterka
Пользователь
 
Аватар для Panterka
 
Регистрация: 10.12.2007
Сообщений: 28
По умолчанию

Цитата:
Сообщение от theos Посмотреть сообщение
...
Серёж, выручай, так и не получается, ошибки выдаёт.
Необходимо исправить:
- что-бы вместо строчки общего кол-ва шашек,которое идёт после строчки про цвета, появлялось строчка либо, "Ответ: невозможно" или "Ответ:возможно", а в случае возможно, должна появлятся строчка, например "Результат: 141423131313212".
- и чтобы программа не запрашивала куда, а автоматически сохраняла вводимые данные и результат вычислений в файл напримерна диск С "rezult.txt".
Срочно нужна помощь,может у кого-то тоже есть какие-нибудь варианты как это исправить,момогите пожалуйсто!

PS:программа выложенна theos'ом выше.

Последний раз редактировалось Panterka; 24.12.2007 в 10:10.
Panterka вне форума Ответить с цитированием
Старый 25.12.2007, 10:55   #10
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Код:
#include <stdio.h>      
#include <stdlib.h>      
#include <conio.h>
     
template<class T>      
void swap(T& a, T& b)      
{    
    a = a + b;    
    b = a - b;    
    a = a - b;    
}     
     
// пузырьком      
void sort_lk(int* by,int* l, int n)      
{    
    int i,j;    
    for(i = 0;i < n;i++)    
     for(j = 1;j < n;j++)    
      if(by[j] > by[j-1])    
       {    
        swap(by[j], by[j-1]);    
        swap(l[j], l[j-1]);    
       }     
}      
     
void insert(int *m, int n, int to, int elem)      
{    
//  printf("ins %d to %d\n", elem, to);    
    int i;    
    for(i = n - 1; i >= to; i--)    
        m[i+1] = m[i];    
    m[to] = elem;    
}     
     
int main()      
{    
    int cl;    
    int i, j;    
    int *count, *cname;    
    int *res, total;  
    FILE *f;  
    char filename[32] = "rezult.txt";  
   
    // получение инфы    
    printf("Enter color count:");    
    scanf("%d",&cl);    
    if(cl < 1) return 0;    
   
    count = (int*)malloc(cl*sizeof(int));    
    cname = (int*)malloc(cl*sizeof(int));    
    for(i = 0;i < cl;i++)    
    {    
        printf("Enter chips' count for color '%d':", i + 1);    
        do scanf("%d", count + i); while(count[i] < 0);    
        cname[i] = i + 1;    
    }     
          
    sort_lk(count, cname, cl);      
     
    // определение возможности размещения      
    j = 0;      
    for(i = 1; i < cl; i++)      
    {    
        j += count[i];    
    }     
     
    total = count[0] + j;      
  
    f = fopen(filename,"w");   
          
    if(j < count[0])      
    {    
        printf("\nImposible!\n");      
        fprintf(f,"\nImposible!\n");    
        free(count);    
        free(cname);    
        getch();
        return(0);    
    }     
     
    printf("\nIt's posible!\n");
    fprintf(f,"\nIt's posible!\n");

    res = (int*)malloc(total*sizeof(int));      
     
    j = 1;      
     
    while(count[0] > 0)      
    {    
        insert(res,total,0,cname[j]);    
        insert(res,total,0,cname[0]);    
        count[0]--;    
        count[j]--;    
        if(count[j] < 1) j++;    
    }     
     
    while(j < cl)      
    {    
        for(i = 1;res[i] == cname[j] || res[i-1] == cname[j];i++);    
        insert(res, total, i, cname[j]);     
        count[j]--;    
        if(count[j] < 1) j++;    
    }     
     
    fprintf(f,"Result: ");      
    printf("Result: ");
    for(i = 0;i < total;i++)      
    {
        printf("%d ",res[i]);      
        fprintf(f,"%d ",res[i]);      
    }     
    fprintf(f,"\n");      
    printf("\n");      
     
    free(res);      
    free(count);      
    free(cname);      
    fclose(f);   
    getch();
    return(0);      
}
theos вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание обьектов во время работы программы Rusl92 Общие вопросы Delphi 4 11.08.2008 17:03
Создание резидентной программы DenisVR Свободное общение 2 07.11.2007 19:42
создание программы помогите Farmaceft Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 20.04.2007 10:40
Создание программы для запароливания файлов шолku Общие вопросы Delphi 14 05.01.2007 08:32