Всем добрый день)
Задача следующая. Даны два массива, в одном 5 элементов, в другом 20. Определить индексы и значения максимальных элементов в каждом массиве.
Всё, в принципе, работает, но никак не хочет выводить максимальные элементы. Перепробовал много способов, в любом случае, выводит все элементы массива.
Если кто-нибудь сможет помочь, буду очень благодарен.
Нахождение максимальных элементов реализуется в процедуре, блоке minmax.
Сама программа:
Заголовочный файл
#define myunit_h
#ifdef myunit_h
struct spisok
{
char *name;
char mas;
};
int strimr(char *s);
void scopy(char *d, char *s);
int input(char *fname, spisok *&s,int &n);
void minmax(spisok *s,int n);
void output(spisok *s, int n);
void freenames(spisok *s, int n);
#endif
Исходный код
#include <locale.h>
#include <stdlib.h>
#include <iomanip>
#include "string"
#include <fstream>
#include <iostream>
#include <conio.h>
#include <string.h>
#include "myunit.h"
using namespace std;
void main()
{
spisok *s1,*s2;
setlocale(LC_CTYPE,"Russian");
system("cls");
char text1[_MAX_PATH],text2[_MAX_PATH];
int n1=0,n2=0,i,p=0;
do
{
system("cls");
printf_s("1 - Ввод 1го массива\n2 - Ввод 2го массива\n");
printf_s("3 - Вывод 1го массива\n4 - Вывод 2го массива\n");
printf_s("5 - Вывести по условию 1й список\n6- Вывести по условию 2й список\n");
printf_s("0 - Выход\n");
scanf_s("%d",&i);
system("cls");
switch(i)
{
case 1:
printf_s("Введите имя файла:");
scanf_s("%s",text1,_MAX_PATH);
p=input(text1,s1,n1);
if(p)
switch(p)
{
case 1:
printf_s("\nФайл не открыт!");
break;
case 2:
printf_s("\nОшибка при чтении!");
break;
case 3:
printf_s("\nОшибка при выделении памяти!");
break;
}
printf_s("Файл открыт\nPress any key to Return!");
_getch();
break;
case 2:
printf_s("Введите имя файла:");
scanf_s("%s",text2,_MAX_PATH);
p=input(text2,s2,n2);
if(p)
switch(p)
{
case 1:
printf_s("\nФайл не открыт!");
break;
case 2:
printf_s("\nОшибка при чтении!");
break;
case 3:
printf_s("\nОшибка при выделении памяти!");
break;
}
printf_s("Файл открыт\nPress any key to Return!");
_getch();
break;
case 3:
output(s1,n1);
printf_s("Press any key to Return!");
_getch();
break;
printf_s("Файл открыт\nPress any key to Return!");
_getch();
break;
case 4:
output(s2,n2);
printf_s("Press any key to Return!");
_getch();
break;
case 5:
minmax(s1,n1);
printf_s("Press any key to Return!");
_getch();
break;
case 6:
minmax(s2,n2);
printf_s("Press Key to Return!");
_getch();
break;
}
} while (i!=0);
freenames(s1,n1);
freenames(s2,n2);
}
И сама процедура
#include <iostream>
#include <conio.h>
#include "myunit.h"
#include <locale.h>
#include <stdlib.h>
#include <iomanip>
#include "string"
#include <fstream>
using namespace std;
int strimr(char *s)
{setlocale(LC_CTYPE,"Russian");
system("CLS");
int i=strlen(s);
if(!i)
return 0;
i--;
while ((i>=0)&(s[i]==' ')) i--;
s[++i]=0;
return i;
}
void scopy( char *d, char *s)
{setlocale(LC_CTYPE,"Russian");
system("CLS");
while (*s)
*d++=*s++;
*d=0;
}
int input(char *fname, spisok *&s,int &n)
{
FILE *f;
if(fopen_s(&f,fname,"r"))
return 1;
if (fscanf_s(f,"%*[ \t\n]")!=EOF)
while(fscanf_s(f,"%*[^\n]\n")!=EOF) n++;
if(!n)
{
s=NULL;
fclose(f);
return 2;
}
s=(spisok*)malloc(sizeof(spisok)*n);
if (!s)
{
fclose(f);
return 3;
}
rewind(f);
char buf[40];
fscanf_s(f,"%*[ \t\n]");
for (int i=0;i<n;i++)
{
fscanf_s(f,"%40[^\0]%f\n",buf,40,&s[i].mas);
s[i].name=(char*)malloc(strimr(buf)+1);
if (!s[i].name)
{
fclose(f);
for (int k=0;k<i;k++)
free(s[k].name);
free(s);
return 3;
}
scopy(s[i].name,buf);
}
fclose(f);
return 0;
}
void minmax(spisok *s,int n)
{
int max=*s;
printf_s("\nmax:\n");
for (int i=0;i<n;i++)
{
if(s[i].mas>s[max].mas) s[max].mas=i;
}
printf_s("%s\n",s[max].name,s[max].mas);
}
void output(spisok *s, int n)
{
for (int i=0;i<n;i++)
printf_s("%s\n",s[i].name,s[i].mas);
}
void freenames(spisok *s, int n)
{
for (int i=0;i<n;i++)
free(s[i].name);
free(s);
}