Страница 1 из 1

Помогите, пожалуйста, закончить программу!

Добавлено: 15 апр 2010, 19:02
Spiderman
Нужно было написать программу с разбиением на функции создание стека, добавление элемента в конец стека, удаление элемента из начала. Это всё уже готово, но вот с главным заданием возникли проблемы: Написать программу с функцией, которая вставляет в непустой целочисленный стек новый такой же элемент перед каждым его вхождением в стек

Код: Выделить всё

#include <stdio.h>
#include <conio.h> 

#include <process.h>//для очистки экрана
#include <iostream.h>
#include <windows.h>// для поддержки русского

char* Rus(const char* text);
char bufRus[255];
struct STACK   //описание структуры переменной содержащей информационное и адресное пространство
{int info;
STACK *Next;};

STACK *head=NULL;
//Формирование стека
void func1(STACK **);
//Вывод содержимого стека
void func2(STACK *);
//Добавление элемента в конец стека
void func3(STACK **);

//Удаление элемента из начала стека
void func4(STACK **);
void func5(STACK **); // выполнение задания

void main (void)
{
int n, i;

while (1)
{

	printf(Rus("\nФормирование стека - 1\n")); 	
	printf(Rus("\nПросмотр - 2\n")); 
	printf(Rus("\nДобавление элемента в конец стека - 3\n")); 
	printf(Rus("\nУдаление элемента из начала стека - 4\n")); 
	printf(Rus("\nВыполнение задания - 5\n")); 
	printf(Rus("\nВыход - 0\n")); 

//*******************************************************
	fflush(stdin);
	

switch(n=getchar())

{

case '1': 
system("cls"); 
printf(Rus("\n Введи количество элементов в стеке\n"));
scanf("%d", &n);
srand(0);
for(i=1; i<=n; i++) 
 func1(&head);
system("pause");
system("cls"); 
break;


case '2':
	system("cls"); 
	//Просмотр непустого стека
	func2(head);
	system("pause");
    system("cls"); 
	break;

	case '3':
			func3(&head);
	system("pause");
    system("cls");

	break;

	case '4':

	//Удаление элемента из начала стека
    func4(&head);
	system("pause");
    system("cls");
	break;


case '5':
	func5(&head);
	system("pause");
    system("cls");
	break;

	
	
case '0': exit(0);

default:	printf(Rus("\nНет вида работы %c\n"),n); break;

}
}
}



char* Rus(const char* text)
{
	CharToOem(text,bufRus);
	return bufRus;
}


//Формирование стека
void func1(STACK **head){
//head - вершина стека
//t - текущий элемент
//Захват памяти под первый элемент
STACK* t=new STACK;
//t->info=rand()%100;
printf(Rus("\nВводи элемент стека\n\n"));
scanf("%d", &t->info);
t->Next=(*head); //Новый элемент указывает на головной
(*head)=t;
//Новый элемент становится гооловным
}

void func2(STACK *h){
system("cls");
printf("\n\n");
	puts(Rus("\n***Содержимая информация***\n"));
	if(!h){
 printf(Rus("\nСписок пуст\n\n"));
 exit(0);}
	do{
printf("%p\n",h);
printf("%d\n\n",h->info);
		h=h->Next; //вывод элемента и смещение по стеку
	}while(h);    //пока не достигнут конец стека
		}

//Добавление элемента в конец стека
void func3(STACK **h){
system("cls");
	if(!(*h)){
  printf(Rus("\nСписок был пуст\n\n"));
  func1(h);
	return;}

	STACK * current, *head;
    STACK* t=new STACK;

t->Next=*h;
t->info=(*h)->info ;
head=*h;
*h=t;
	do{

		current=head->Next;
		if(current){
		head->info=current->info;
		head=head->Next;}
		else {
		printf(Rus("\nВводи новый элемент стека\n\n"));
        scanf("%d", &head->info);
		head=head->Next;}
		     
	}while(head);    
		

}
	
//Удаление элемента из начала стека
void func4(STACK **head){
STACK *current;
if(!*head) exit(0); //если стека нет
current=*head; //копия указателя на начало стека
*head=current->Next; //указатель на голову указывает на второй элемент
delete current; //удаляем головной элемент
 printf(Rus("\nЭлемент удален\n\n"));
}

/* выполнение задания	
Написать программу с функцией, которая вставляет в непустой целочисленный 
стек новый такой же элемент перед каждым его вхождением  в стек 
*/

Re: Помогите, пожалуйста, закончить программу!

Добавлено: 27 апр 2010, 21:15
Spiderman
ни у кого нет идей? попробую уточнить задание: сначала читается вершина стека, а потом добавляется точно такой же элемент, который только что был прочитан. Наверху должно быть 2 одинаковых элемента...только у меня всё равно ничего не получается

Re: Помогите, пожалуйста, закончить программу!

Добавлено: 29 апр 2010, 09:26
Romeo
Понимаешь, ты выложил слишком много кода. Его нужно долго читать и долго разбираться в чём может быть ошибка. Так много времени нет у большинства посетителей форума: они все достаточно занятые люди.

Если бы ты локализовал ошибочное поведение (например с помощью дебагера) и потом указал маленький кусочек кода, где была найдена проблема и попросил совета, как её исправить, то тебе бы ответили сразу, я в этом уверен.

Re: Помогите, пожалуйста, закончить программу!

Добавлено: 30 апр 2010, 00:00
Spiderman
да в том то и дело, что ошибки тут нет.. всё прекрасно работает и так, но нужно ещё сделать одну функцию на выполнение задания, а у меня не получается...тут никак одним фрагментом не обойдёшься

Re: Помогите, пожалуйста, закончить программу!

Добавлено: 30 апр 2010, 09:10
Romeo
Хорошо, тогда показывай свои попытки написать эту функцию - будем помогать исправлять. В чём проблема возникаем, собственно? Постановка "а у меня не получается" слишком абстрактна.