Структуры и масивы

08.12.2010
13
0
#1
Дан масив который содержит данные про книги: фамилия автора, год издания, название книги.
Вывести на экран в порядке возрастания года информацию про книги которые начинаются с "Inf". Если таких книг нет - сообщить об этом


Алгоритм:
C++:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define N 5
int main()
{
int i;
char A[N];
char *P;
typedef struct danni			//Обьявление структуры
{
char fam[20];	//фамилия автора
int god;		 //год издания
char kniga[120]; //название книги
}
vedomost;
for(i=0; i<N; i++)				 //заполнение масива
{
gets(vidomist.fam);
scanf("%d",&vedomost.rik);
gets(vedomost.kniga);
}
P=strstr("Inf",vedomost.kniga);		//поиск строки "Inf" в строке "книги"

if(P!=NULL)			 //если такая строка существует, то мы переходим в конец строки "Inf" и продолжаем искать дальше
{
P+=3;
P=strstr("Inf",vedomost.kniga)
}
else
printf("Таких книг нет"):

getch();
return 0;
}
 
I

ierofant

#6
OKEN,
Да, в украинском я не силён, но я бы вообще посоветовал имя year, для этой переменной, раз уж зашёл разговор.
 
I

ierofant

#7
C++:
#include <stdio.h>
#include <string.h>
#define N 5

typedef struct
{
char autor [20];
int year;
char book_name [120];
} BookInfo;

int main ()
{
BookInfo list [N];
for (int i = 0; i < N; i++)
{
printf ("Автор: ");
scanf ("%s", list [i].autor);

printf ("Год издания: ");
scanf ("%d", &list [i].year);

printf ("Название: ");
scanf ("%s", list [i].book_name);

printf ("\n");
}

BookInfo* plist [N];
int n = 0;
for (int i = 0; i < N; i++)
{
char *p = strstr (list [i].book_name, "Inf");
if (p != NULL && (p == list [i].book_name))
{
plist [i] = &(list [i]);
n++;
}
}

if (n == 0) printf ("Таких книг нет\n");
else
{
for (int i = 0; i < n - 1; i++)
{
int ind = i;
for (int ii = ind + 1; ii < n; ii++)
if (plist [ii]->year < plist [ind]->year) ind = ii;

BookInfo *temp = plist [i];
plist [i] = plist [ind];
plist [ind] = temp;
}
for (int i = 0; i < n; i++) printf ("%s\t%d\t%s\n", plist [i]->autor, plist [i]->year, plist [i]->book_name);
}
return 0;
}