//---------------------------------------------------------------------------
#pragma hdrstop
#include <alloc.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
//---------------------------------------------------------------------------
#pragma argsused
string rus(char s[]){
string t;
int i=0;
t=s;
while (t!=0)
{
if(t>='А'&& t<='п' )
t-=64;
if(t>='р'&& t<='я' )
t-=16;
i++;
}
return t;
}
struct dislist
{
char * name;
dislist * prev;
};
void add(dislist*&c,char * name)
{
dislist * p;
p=new dislist;
p->name = (char*)malloc(sizeof(name));
strcpy(p->name,name);
p->prev=c;
c=p;
}
bool find(dislist*c,char*name)
{
do{
if(strcmp(c->name,name))
return true;
c=c->prev;
}while(c!=0);
return false;
}
int main(int argc, char* argv[])
{
int p; //номер пункта меню, вводимый пользователем
char ch;
char * name=0;
dislist * c = 0;
int i;
do {
cout<<endl;
cout<<rus("1. Включить элемент в стек")<<endl;
cout<<rus("2. Удалить элемент из стека")<<endl;
cout<<rus("3. Найти элемент")<<endl;
cout<<rus("0. Завершение работы")<<endl<<endl;
cout<<rus("Укажите пункт меню: ");
cin>>p;
switch (p)
{
case 1:
name = (char*)calloc(1,sizeof(char));
i=-1;
while((ch=getch())!='\r')
{
i++;
name=(char*)realloc(name,sizeof(name)+sizeof(char));
name = ch;
cout<<ch;
name[i+1] = '\0';
}
cout<<endl;
add(c,name);
free(name);
cout<<rus("Добавлено")<<endl;
break;
case 3:
name = (char*)calloc(1,sizeof(char));
i=-1;
while((ch=getch())!='\r')
{
i++;
name=(char*)realloc(name,sizeof(name)+sizeof(char));
name = ch;
cout<<ch;
name[i+1] = '\0';
}
cout<<endl;
cout<<(find(c,name)?rus("Элемент найден"):rus("Элемент не найден"))<<endl;
free(name);
break;
case 0:
exit(0);
break;
default: cout<<rus("Ошибка" );
}
}while (true);
return 0;
}
//---------------------------------------------------------------------------
Проблема со стеком(C++)
Код:
[COLOR="Red"]Язык программирования указывать в названии темы!!![/COLOR]модератор.
[COLOR="Red"]Указал, потом при исправлении случайно стер ) сори[/COLOR]SMiX
Код:
//---------------------------------------------------------------------------
#pragma hdrstop
#include <alloc.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
//---------------------------------------------------------------------------
#pragma argsused
string rus(char s[]){
string t;
int i=0;
t=s;
while (t!=0)
{
if(t>='А'&& t<='п' ) // разница кодов этих символов 64
t-=64;
if(t>='р'&& t<='я' ) // разница кодов этих символов 16
t-=16;
i++;
}
return t;
}
struct dislist
{
char * name;
dislist * prev;
};
void add(dislist*&c,char * name)
{
dislist * p;
p=new dislist;
p->name = name;
// strcpy(p->name,name);
p->prev=c;
c=p;
}
bool find(dislist*c,char*name)
{
do{
if(strcmp(c->name,name)==0)
return true;
c=c->prev;
}while(c!=0);
return false;
}
bool del(dislist *& c)
{
if(c==0) return false;
dislist * p = c;
c = c->prev;
delete p;
return true;
}
void last(dislist * c)
{
if(c==0) cout<<rus("Стек пуст")<<endl;
else
{
cout<<c->name<<endl;
}
}
int main(int argc, char* argv[])
{
int p; //номер пункта меню, вводимый пользователем
char ch;
char * name=0;
dislist * c = 0;
int i;
do {
cout<<endl;
cout<<rus("1. Включить элемент в стек")<<endl;
cout<<rus("2. Найти элемент")<<endl;
cout<<rus("3. Удалить последний элемент")<<endl;
cout<<rus("4. Посмотреть последний элемент стека")<<endl;
cout<<rus("5. Проверить, пуст ли стек")<<endl;
cout<<rus("0. Завершение работы")<<endl<<endl;
cout<<rus("Укажите пункт меню: ");
cin>>p;
switch (p)
{
case 1:
cout<<rus("Введите имя дисциплины: ");
name = (char*)calloc(1,sizeof(char));
i=-1;
while((ch=getch())!='\r')
{
i++;
name=(char*)realloc(name,(i+2)*sizeof(char));
name = ch;
cout<<ch;
name[i+1] = '\0';
}
cout<<endl;
add(c,name);
cout<<rus("Добавлено")<<endl;
break;
case 2:
name = (char*)calloc(1,sizeof(char));
i=-1;
while((ch=getch())!='\r')
{
i++;
name=(char*)realloc(name,(i+2)*sizeof(char));
name = ch;
cout<<ch;
name[i+1] = '\0';
}
cout<<endl;
cout<<(find(c,name)?rus("Элемент найден"):rus("Элемент не найден"))<<endl;
break;
case 3:
cout<<(del(c)?rus("Элемент удален"):rus("Ошибка"))<<endl;
break;
case 4:
last(c);
break;
case 5:
if(c==0) cout<<rus("Стек пуст")<<endl;
else cout<<rus("Стек не пуст")<<endl;
break;
case 0:
exit(0);
break;
default: cout<<rus("Ошибка" );
}
}while (true);
return 0;
}
//---------------------------------------------------------------------------
#pragma hdrstop
#include <alloc.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
//---------------------------------------------------------------------------
#pragma argsused
string rus(char s[]){
string t;
int i=0;
t=s;
while (t!=0)
{
if(t>='А'&& t<='п' ) // разница кодов этих символов 64
t-=64;
if(t>='р'&& t<='я' ) // разница кодов этих символов 16
t-=16;
i++;
}
return t;
}
struct dislist
{
char * name;
dislist * prev;
};
void add(dislist*&c,char * name)
{
dislist * p;
p=new dislist;
p->name = name;
// strcpy(p->name,name);
p->prev=c;
c=p;
}
bool find(dislist*c,char*name)
{
do{
if(strcmp(c->name,name)==0)
return true;
c=c->prev;
}while(c!=0);
return false;
}
bool del(dislist *& c)
{
if(c==0) return false;
dislist * p = c;
c = c->prev;
delete p;
return true;
}
void last(dislist * c)
{
if(c==0) cout<<rus("Стек пуст")<<endl;
else
{
cout<<c->name<<endl;
}
}
int main(int argc, char* argv[])
{
int p; //номер пункта меню, вводимый пользователем
char ch;
char * name=0;
dislist * c = 0;
int i;
do {
cout<<endl;
cout<<rus("1. Включить элемент в стек")<<endl;
cout<<rus("2. Найти элемент")<<endl;
cout<<rus("3. Удалить последний элемент")<<endl;
cout<<rus("4. Посмотреть последний элемент стека")<<endl;
cout<<rus("5. Проверить, пуст ли стек")<<endl;
cout<<rus("0. Завершение работы")<<endl<<endl;
cout<<rus("Укажите пункт меню: ");
cin>>p;
switch (p)
{
case 1:
cout<<rus("Введите имя дисциплины: ");
name = (char*)calloc(1,sizeof(char));
i=-1;
while((ch=getch())!='\r')
{
i++;
name=(char*)realloc(name,(i+2)*sizeof(char));
name = ch;
cout<<ch;
name[i+1] = '\0';
}
cout<<endl;
add(c,name);
cout<<rus("Добавлено")<<endl;
break;
case 2:
name = (char*)calloc(1,sizeof(char));
i=-1;
while((ch=getch())!='\r')
{
i++;
name=(char*)realloc(name,(i+2)*sizeof(char));
name = ch;
cout<<ch;
name[i+1] = '\0';
}
cout<<endl;
cout<<(find(c,name)?rus("Элемент найден"):rus("Элемент не найден"))<<endl;
break;
case 3:
cout<<(del(c)?rus("Элемент удален"):rus("Ошибка"))<<endl;
break;
case 4:
last(c);
break;
case 5:
if(c==0) cout<<rus("Стек пуст")<<endl;
else cout<<rus("Стек не пуст")<<endl;
break;
case 0:
exit(0);
break;
default: cout<<rus("Ошибка" );
}
}while (true);
return 0;
}
//---------------------------------------------------------------------------