Новичок
Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.12.2009
Репутация: нет Всего: нет
|
При компиляции вылезает куча ошибок, не успеваю их исправить, времени в обрез. Главная проблема с передачей массивов в функции и с преобразованием типов (указателей). Либо не передается, либо уже внутри функции ошибки возникают. Кто-нибудь, помогите исправить! | Код | #include <conio.h> #include <locale.h> #include <stdlib.h> #include <ctype.h> #include <time.h> #include <stdio.h> #include <string.h>
int entcontrol(int a, int b) { int bl; int i,N; char str[20];
do { scanf("%s",str); bl = 1; for(i=0;i<strlen(str);i++) if(!isdigit(str[i])) { printf("Error: wrong value\n"); bl=0; break; } if(!bl) continue; N = atoi(str); if(N<a || N>b) { printf("Error: wrong value\n"); bl = 0; } } while (!bl); fflush(stdin); return N; }
void wait(void) { printf("\n\nДля продолжения программы нажмите любую клавишу..."); getch(); }
int menu2(char *menu) //просто абстрактное меню { int s; while(1) { system("cls"); printf(menu); printf("\n\n"); scanf("%d",&s); switch (s) { case '1': return 1; case '2': return 2; default: printf("Неверно указан номер пункта меню"); wait(); return 0; } } }
void print_r( double r, double a, double x, int e) { if (r!=0) { printf("\nИсходные данные:\n a=%15.7f \n b=%15.7f \n n=%15.7d",a,x,e); printf("\n\nРезультат:\n "); printf("%15.7f",r);
} else printf("\nНет данных"); wait(); }
void print_m( int n, int mtrx[1000][1000]) { int i;
printf("\n\nПрограмма по матрице "); for (i=0; i<n; i++) printf("%d ",mtrx[i]);
wait(); }
void about_me(void) { printf("\nПрограмма Рекурсия и матрица"); printf("\n2010"); printf("\n"); printf("\nАвтор:"); printf("\nГруппа:"); printf("\n"); printf("\n"); wait(); } void spravka(int prog) { if (prog==1) //программа по матрице { printf("\n Задание по матрице"); printf("\nДан лабиринт из N комнат, к нему дана матрица смежности."); printf("Необходимо найти путь из комнаты X в комнату Y."); }
if (prog==2) //программа по рекурсии printf("\n Рекурсия \nДаны положительные действительные числа а и b и натуральное n . " "\nВычислить согласно формуле произведение членов последовательности."); wait(); } void help(void) { printf("\n Пункт меню 1 (Выберите программу):"); printf("\nПозволяет выбрать необходимаю программу:" "\nРекурсия или матрица\n(в противном случае выдает сообщение:" "'Неверно указан номер пункта меню'\n"); printf("\n Пункт меню 2 (Ввод данных):"); printf("\nПозволяет ввести данные в выбранную программу" "\nДля программы Рекурсия вводятся действительные числа а,х,е" "\nДля программы Матрица предлагается ввести данные с клавиатуры" " или сгенерировать случайным образом." "\n Пункт меню 3 (Решение):"); printf("\nПозволяет произвести расчет рекурсии и матрицы," "\nдействует только при вводе данных\n"); printf("\n Пункт меню 4 (Вывод результатов):"); printf("\nПроизводит вывод решения на экран\n"); printf("\n Пункт меню 5 (Справка):"); printf("\nСодержит текст заданий при выборе одной из двух программ как основную" "\nЕсли программа не выбрана, справка выводиться не будет\n"); printf("\n Пункт меню 6 (Помощь):"); printf("\nОбзор работы пунктов программы\n"); printf("\n Пункт меню 7 (О программе):"); printf("\nВыдает данный о программе " "\n(название, год, автор, группа\n"); printf("\n Пункт меню 8 (Выход):"); printf("\nВыход из программы\n"); wait(); }
double Decision(double a, double b, int n, int i) { static double res=0; double h; if (i>n) return res; h=(double)(b-a)/n; res=res+(double)(a+(i-0,5)*h)/((1+(a+(i-0,5)*h))*(1+(a+(i-0,5)*h)));
return h*Decision(a, b, n, i+1); }
// z - исходная комната; zz - конечная комната; n - количество комнат int Matrix(int n, int z, int zz, int mtrx[1000][1000], int arr[1000]) { int i,j,s,k; int avt, steven=0; //avt - тупик; steven - путь найден j=z; do { for (i=0; i<n; i++) { if (i==j) continue; if (mtrx[j][i]==1) { avt=0; if ((i==zz)) {steven=1 ;break;} for (s=0; s<k; s++) if (i==arr[s]) avt=1; if (avt) {break;}; arr[k]=i; k++; j=i; } } } while((!steven)&&k!=1000);
return 1; }
int input(int prog, int mtrx[1000][1000], int *n, double *a, double *x, int *e, int *z, int *zz) { int check; int k,i,j, flag;
if (prog==1) // Программа по матрице { flag=menu2("\n 1. Сгенерировать автоматически.\n 2. Оптимистично ввести вручную."); printf("\nВведите количество комнат в лабиринте:"); scanf("%d",&k); if (k>0 && k<1000) { *n=k;
for (i=0;i<k;i++) { for(j=0; j<i; j++) { if (flag==1) mtrx[i][j]=(rand()%2); else { do { check=1; printf("\nВведите 0 или 1: "); scanf("%d",&mtrx[i][j]); mtrx[j][i]=mtrx[i][j]; if ( (mtrx[i][j]!=0) && (mtrx[i][j]!=1) ) {printf("\n Вводите только 0 или 1"); check=0; break;} } while(!check); }; } } do { check=1; printf("\nВведите номер исходной комнаты:"); scanf("%d",&z); printf("\nВведите номер конечно комнаты:"); scanf("%d",&zz); if ( (z<0) || (z>=n) ||(zz<0) || (zz>=n)) {printf("\n Номера комнат не может быть больше общего количества " "или отрицательным. Вероятно хотя бы одну вы ввели неверно"); check=0; break;} } while(!check);
}} //============================================
else { if (prog==2) //Программа по рекурсии { do { try { check=1; printf("\nВведите действительные числа A и B:"); scanf("%f%f",&a, &x); printf("\nВведите натуральное N:"); n[0]=entcontrol(0,1000); } catch(...) { printf("\n!Вы что-то неправильно ввели и теперь ничего не будет работать. Введите нормально " "или горите в аду."); wait(); check=0; } }
while(!check); } else printf("\nСначала необходимо выбрать программу."); } wait(); return (check); }
int main()
{ setlocale(LC_ALL,"Russian"); srand((unsigned) time(NULL)); int mnk; // case в главном меню double r=0; //результат рекурсии double a,x; //входные данные рекурсии (которые a и b) int e; // N в рекурсии
int mtrx[1000][1000]; // матрица смежности int array[1000];// путь
int n, z, zz; //размер матрицы и номера нужных комнат int i,j; int k=0; // счетчик при вычислении int check; // check=0 входные данные не введены, check=1 данные введены int prog=0; // prog=1 выбрана программа по матрице, prog=2 выбрана рекурсия, prog=0 ничего не выбрано
for (i=0; i<1000; i++) for (j=0; j<1000; j++) mtrx[i][j]=0;
system("cls");
while(1) { system("cls"); printf("\n 1. Выберите программу" "\n 2. Ввод данных" "\n 3. Решение" "\n 4. Вывод результатов" "\n 5. Справка" "\n 6. Помощь" "\n 7. О программе" "\n 8. Выход "); printf("\n\n"); getch(mnk); switch (mnk) { case '1': //Ввод программы prog=menu2("\n 1. Программа по матрице\n 2. Программа по рекурсии"); break; case '2': //Ввод данных check=input(prog, &mtrx, &n, &a, &x, &e, &z, &zz); break; case '3': //Решение if (check>0) { if (prog==1) {Matrix(n, z, zz, &mtrx, &array)}; if (prog==2) { r=Decision(a, x, e, 0); }; } else printf("\nВведены не все данные!!!"); wait(); break; case '4': //Вывод результатов if (prog==1) print_m(&mtrx, n); else if (prog==2) print_r(r, a, x, e); break; case '5': //Справка spravka(prog); break; case '6': //Помощь help(); break; case '7': //О программе about_me(); break; case '8': //Выход return 0; default: printf("Неверно указан номер пункта меню"); }
} return 0; }
|
|