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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2010, 19:37   #1
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
По умолчанию Структура, содержащая массивы и матрицу данных - проблема с записью и/или выводом

Здравствуйте!
Пожалуйста, помогите найти ошибку в несложной программке.
Изначально суть задачи была:
создать структуру данных ABITURIENT и отсортировать ее по алфавиту. СТруктура содержит следующие данные:
1. Ф.И.О. абитуриента
2. Пол
3. Специальность
4. Оценки по 3-м вступительным экзаменам

Причем обязательным условием, являлось то, что экзаменационные оценки должны задаваться в виде массива из 3-х величин

Проблема в том, что написанная программа правильно обрабатывает все данные, кроме этого массива оценок. На выходе получаем что-то вроде:

Ivanov M Ingener
1546
1577
1586
Petrov M Geolog
2435
2564
2577

Т.е. вместо оценок 4-х значные числа

Код программы (в Си) следующий:
Код:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define N 2

struct ABITURIENT
{
 char NAME[20];
 char GENDER[20];
 char SPEC[20];
 int EXAM[20][20];
 }
 ABIT[20];

void vvod()
{
 int i, m;
 for (i=0; i<N; i++)
  {
  printf("Vvedite dannye %d-go abiturienta\n", i+1);
  printf("Familia i inicialy: ");
  scanf("%s", ABIT[i].NAME);
  printf("Pol: ");
  scanf("%s", ABIT[i].GENDER);
  printf("Specialnost: ");
  scanf("%s", ABIT[i].SPEC);
	for (m=0; m<3; m++)
	 {
	 printf("Ocenka za %d-j ekzamen\n", m+1);
	 scanf("%d", ABIT[i].EXAM[m]); }
	 }
   }

void sort()
{
 int j,k;
 ABITURIENT p;
 for(j=0; j<N-1; j++)
 {
 for(k=j+1; k<N; k++)
 {
   if(strcmp(ABIT[j].NAME,ABIT[k].NAME)>0)
   {
      p=ABIT[j];
      ABIT[j]=ABIT[k];
      ABIT[k]=p;
  }
 }
 }
}

void main()
{
 clrscr();
 vvod();
 sort();

 int z,q;
 for (z=0; z<N; z++)
 {
  printf("%s %s %s\n",ABIT[z].NAME,ABIT[z].GENDER,ABIT[z].SPEC);
	for (q=0; q<3; q++)
	{
	 printf("%d\n",ABIT[z].EXAM[q]);
	}
  }
  getch();
}
Подозреваю, что проблема где-то либо с записью массива экзаменов:
Код:
for (m=0; m<3; m++)
	 {
	 printf("Ocenka za %d-j ekzamen\n", m+1);
	 scanf("%d", ABIT[i].EXAM[m]); }
	 }
Либо с его выводом:
Код:
for (q=0; q<3; q++)
	{
	 printf("%d\n",ABIT[z].EXAM[q]);
	}
Но найти никак не могу, бьюсь уже второй день
Помогите пожалуйста!

P.S. Указатели использовать нельзя
flexin вне форума Ответить с цитированием
Старый 09.01.2010, 17:15   #2
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

Причем обязательным условием, являлось то, что экзаменационные оценки должны задаваться в виде массива из 3-х величин

int EXAM[20][20];

зачем для массива из трех величин использовать двумерный массив 20x20? может надо int EXAM[3]; ?
_Ч_ вне форума Ответить с цитированием
Старый 09.01.2010, 17:20   #3
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
По умолчанию

ну для 1-го человека результаты экзамена - это массив,
а для нескольких человек - матрица

т.е. внутри структуры
NAME[20]; - это массив имен, а
EXAM[20][20] - матрица оценок

хотя согласна
EXAM[20][3] (т.к. оценок 3) - но от от этого ничего не меняется
flexin вне форума Ответить с цитированием
Старый 09.01.2010, 17:28   #4
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

неверно. у одного аббитуриента три оценки. структура ABITURIENT описывает свойства одного аббитуриента. поэтому массив должен быть одномерным int EXAM[3];

Для представления 20 абитуриентов у вас уже есть массив из 20 аббитуриентов ABIT[20];.

Последний раз редактировалось _Ч_; 09.01.2010 в 17:34.
_Ч_ вне форума Ответить с цитированием
Старый 09.01.2010, 18:54   #5
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
По умолчанию

да, пожалуй вы правы

тем не менее ничего не изменилось при получении результатов



***********
Прошу прощения, модераторы, перенаправьте тему пожалуйста в раздел Помощь студентам. Я сразу не разглядела
flexin вне форума Ответить с цитированием
Старый 09.01.2010, 19:14   #6
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

проверте еще раз.
и
Код:
scanf("%d", ABIT[i].EXAM[m]);
исправте так:
Код:
scanf("%d", &ABIT[i].EXAM[m]);
_Ч_ вне форума Ответить с цитированием
Старый 09.01.2010, 19:42   #7
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
Хорошо

Большое спасибо!!!
Не знаю как и благодарить!
flexin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью на CD pavel42 Компьютерное железо 2 24.09.2009 16:33
Проблемы с записью данных в базу Serval БД в Delphi 4 24.06.2009 19:39
проблема с выводом данных из таблицы. помогите поправить france@ PHP 4 07.01.2009 12:46
Проблема с базой данных или хостингом Distant PHP 4 02.08.2008 22:46
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49