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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2013, 15:44   #1
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию c++ динамические списки

такое задание :
--
создать структуру worker со следующими полями:
имя рабочего
год принятия на работу
и должность
найти людей которые пошли на работу в заданный год
--
такая проблема, написал код :

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

struct Worker

{
	char nameofWorker[10];
	char dolshnost[10];
    int year;
    struct Worker * next;


};
int main(int* argc ,char * argv[])


{
    
   
   setlocale(LC_CTYPE,"rus");
	int n;
	Worker * r = new Worker[n];
	printf("количество рабочих");
	scanf("%d",&n);
	
	for(int i = 0;i<n;i++){
            printf("%i \n",i+1);
		printf("введите имя рабочего ");
		scanf("%s",r->nameofWorker);
       printf("введите год принятия на работу ");
	    scanf("%d",&r->year); 
	   printf("введите должность");
	    scanf("%s",r->dolshnost);
	
	}
	int currentYear;
	printf("каков нужный год");
	scanf("%d",&currentYear);
	

	for(int i = 0;i<n;i++)
	{
		if(r->year == currentYear)
		{
                       printf("%s",r->nameofWorker);
	        printf("%s",r->dolshnost);
			printf("%d",r->year);
		printf("\n");
		}
	
	
	}

 
    
    
    
    
    getch();
    return 0;
    }
проблема возникает когда начинаю запускать прогу;
пишет
Изображения
Тип файла: jpg фото1.jpg (26.3 Кб, 4 просмотров)

Последний раз редактировалось proef; 04.09.2013 в 15:47.
proef вне форума Ответить с цитированием
Старый 04.09.2013, 15:48   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Что первое бросается в глаза.
Код:
int n;
	Worker * r = new Worker[n];
	printf("количество рабочих");
	scanf("%d",&n);
Количество рабочих вы вводите после выделения памяти под записи. Нужно это сделать до выделения памяти, чтобы выделилось необходимое количество памяти...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 04.09.2013, 15:51   #3
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

начало работать ,но после ввода информации ничего не делает

Последний раз редактировалось proef; 04.09.2013 в 15:55.
proef вне форума Ответить с цитированием
Старый 04.09.2013, 16:04   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Правильно... Ведь вы не передвигаетесь по списку... Вам нужно перейти к следующей записи и проверить условие. Для этого у Вас есть указатель struct Worker * next;

"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 04.09.2013, 16:07   #5
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

как вернуться в начало?

Последний раз редактировалось proef; 04.09.2013 в 17:40.
proef вне форума Ответить с цитированием
Старый 04.09.2013, 16:50   #6
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

опять не работает ) я в этих списках первый день
Код:
#include <iostream>
#include <stdio.h>
#include <locale.h>
#include <conio.h>

struct Worker

{
	char nameofWorker[10];
	char dolshnost[10];
    int year;
    struct Worker * next;


};
int main(int* argc ,char * argv[])


{
    
   
   setlocale(LC_CTYPE,"rus");
	int n;
	printf("êîëè÷åñòâî ðàáî÷èõ");
	scanf("%d",&n);
	Worker * r = new Worker[n];
	
	
	
	for(int i = 0;i<n;i++){
            
            printf("%i \n",i+1);
		printf("ââåäèòå èìÿ ðàáî÷åãî ");
		scanf("%s",r->nameofWorker);
       printf("ââåäèòå ãîä ïðèíÿòèÿ íà ðàáîòó ");
	    scanf("%d",&r->year); 
	   printf("ââåäèòå äîëæíîñòü ");
	    scanf("%s",r->dolshnost);
	    for (int k = i;k<i;k++){
	    r = r->next;
}
	}
	for (int i=n;i>0;i--) r->next = 0;
	int currentYear;
	printf("êàêîâà íóæíûé ãîä");
	scanf("%d",&currentYear);
	for(int i = 0;i<n;i++)
	{
          
            
		if(r->year == currentYear)
		{   printf("%s",r->nameofWorker);
	        printf("%s",r->dolshnost);
			printf("%d",r->year);
		printf("\n");
		}
		 

	
	}

 
    
    
    
    
    getch();
    return 0;
    }
proef вне форума Ответить с цитированием
Старый 04.09.2013, 17:40   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Раз первый день, так может стоит начать с теории - http://lord-n.narod.ru/download/book..._C/22/2205.htm и http://programmersforum.ru/showpost....78&postcount=7.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 04.09.2013 в 17:46.
BDA вне форума Ответить с цитированием
Старый 04.09.2013, 19:51   #8
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

нас учили этому но практику я начал сегодня
proef вне форума Ответить с цитированием
Старый 04.09.2013, 20:20   #9
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Как, успешно? BDA скинул вам шикарную ссылку. Почитав материал, действительно можно понять работу списков.. В статья есть в принципе все, что нужно для Вашей задачи..
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 04.09.2013, 20:34   #10
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

полностью переделал прогу
делал по образцам из ссылки
всё равно выводит последний элемент всё время

Код:


#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <Windows.h>
#include <iostream>


using namespace std;

struct Worker
{
     char nameofWorker[30];
     int year;
     char post[30];  
      struct Worker *next; 
      int *firstElement;
};
void gotoxy(unsigned short x,unsigned short y)
{COORD C = {x,y};
HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(H,C);
     
     }
void PrintWorkerList(
struct Worker *start

,int countofWorkers
)
{
            // int pointXonScreen = 3;
    for(int i = 0;i<countofWorkers;i++){
            //gotoxy(pointXonScreen,5);
            
                 printf("%s\n",start->nameofWorker);
                 printf("%s\n",start->post);
                 printf("%d\n ",&start->year);
                 start->next = start;
                 
                 //pointXonScreen+=15;
                 }
     
     }
     void ScanWorkerList(struct Worker* startPosition,int countofWorkers)
     {
         for (int i  = 0;i<countofWorkers;i++){
                   printf("имя работника      -");
                   scanf_s("%s",startPosition->nameofWorker);
                   printf("должность         -");  
                   scanf_s("%s",startPosition->post);
                   printf("год выхода на работу  -");
                   scanf_s("%d",&startPosition->year);  
              startPosition->next  =  startPosition;
                                }
                     
          
      }
          void  findCurrentWorkers(struct Worker* start,int countofWorkers,int CurrentYear)
          // íàéòè ñîòðóäíèêîâ êîòîðûå íà÷àëè ðàáîòàòü â çàäàííûé ãîä
          { for (int i = 0;i<countofWorkers;i++)
          { if (CurrentYear==start->year)
               {
                
                 printf("%s",start->nameofWorker);
                 printf("%s",start->post);
                 printf("%d",start->year);
                 
                }
                start = start->next;
                 
                 
                 }
               
               
               } 
int main(){
    setlocale(LC_CTYPE,"rus");
    int CountOfWorkers(0);
    int CurrentYear(0);
    
    printf("введите количество работников - ");
    scanf_s("%d",&CountOfWorkers);
    Worker*worker = new Worker[CountOfWorkers];
   
   ScanWorkerList (worker,CountOfWorkers);
   PrintWorkerList(worker,CountOfWorkers);
   printf("введите нужный год");
   scanf_s("%d",&CurrentYear);
   findCurrentWorkers(worker,CountOfWorkers,CurrentYear);
    getchar();
    delete[] worker;
    return 0;
    
    }
Изображения
Тип файла: jpg Безымянный.jpg (23.5 Кб, 0 просмотров)

Последний раз редактировалось proef; 04.09.2013 в 23:58.
proef вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические списки в Си++ Caged Помощь студентам 4 02.11.2011 20:35
Динамические списки С++ sir.andrey Помощь студентам 2 10.07.2011 14:02
Динамические списки МихаилС Паскаль, Turbo Pascal, PascalABC.NET 0 30.01.2011 16:55
динамические списки tricksler Помощь студентам 0 10.12.2010 21:15
Динамические списки CFYZ Паскаль, Turbo Pascal, PascalABC.NET 2 06.07.2010 15:58