Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу ввести в массив данные.  (Прочитано 10273 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Янус
Постоялец

ru
Offline Offline
Пол: Мужской

« : 20-05-2008 09:30 » 

      Пожалуйста помогите начинающему.
Возникла следующая проблема, пишется программа для умнож
ения матриц,создаются 3 динамических массива в 2 первых
данные вводятся вручную и создаются они по заданным
параметрам. В 3 массив записывается результат умножения.
Проблема в том что я не могу програмно  А черт его знает...
ввести туда данные(в тексте программы эти строки заком
ентированы).В ручном вводе все получается,возникает
вопрос почему? И как это сделать? Заранее благодарен.

Вот собственно говоря текст программы. Там где крокозябры программа просит ввести очередной
элемент массива.

Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{

 int i,j,n,l,n1,l1,k;
 double **matr;
 double **matr1;
 double **matr3;
  clrscr();
 printf("‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бва®Є ¬ ваЁжл A:");
 scanf("%d",&n);
 printf("‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв®«Ўж®ў ¬ ваЁжл A:");
 scanf("%d",&l);
     matr=(double**)calloc(n,sizeof(double*));
 for(i=0;i<n;i++)
  { matr[i]=(double*)calloc(l,sizeof(double));
       }
     for(i=0;i<n;i++)
      for(j=0;j<l;j++)
       {
printf("‚ўҐ¤ЁвҐ §­ зҐз­ЁҐ н«Ґ¬Ґ­в  ¬ ваЁжл Ђ:%2d%2d  ",i+1,j+1);
scanf("%d",&matr[i][j]);
}
    printf("ђҐ§г«мв в:");
    for(i=0;i<n;i++)
     { printf("\n");
      for(j=0;j<l;j++)
       printf("%3d",matr[i][j]);
       printf("\n");
}
{
  printf("‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бва®Є ¬ ваЁжл B:");
 scanf("%d",&n1);
 printf("‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв®«Ўж®ў ¬ ваЁжл B:");
 scanf("%d",&l1);
      matr1=(double**)calloc(n1,sizeof(double*));
 for(i=0;i<n1;i++)
  { matr1[i]=(double*)calloc(l1,sizeof(double));

       }
  for(i=0;i<n1;i++)
      for(j=0;j<l1;j++)
       {
printf("‚ўҐ¤ЁвҐ §­ зҐз­ЁҐ н«Ґ¬Ґ­в  ¬ ваЁжл B:%2d%2d  ",i+1,j+1);
scanf("%d",&matr1[i][j]);
}
    printf("ђҐ§г«мв в:");
    for(i=0;i<n1;i++)
     { printf("\n");
      for(j=0;j<l1;j++)
       printf("%3d",matr1[i][j]);
       printf("\n");
}
  matr3=(double**)calloc(n,sizeof(double*));
 for(i=0;i<n;i++)
  { matr3[i]=(double*)calloc(l1,sizeof(double));

       }
       {
for(i=0;i<n;i++)
      for(j=0;j<l1;j++)
       {
printf("‚ўҐ¤ЁвҐ §­ зҐз­ЁҐ н«Ґ¬Ґ­в  ¬ ваЁжл Ђ:%2d%2d  ",i+1,j+1);
scanf("%d",&matr3[i][j]);
}
}
printf("ђҐ§г«мв в:");
    for(i=0;i<n;i++)
     { printf("\n");
      for(j=0;j<l1;j++)
       printf("%3d",matr3[i][j]);
       printf("\n");
}

 }
 }
« Последнее редактирование: 20-05-2008 10:14 от Вад » Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #1 : 20-05-2008 09:50 » 

Янус, Если не трудно, то обрами код программы тегами [сode][/сode] ато половина индексов потерялась(была распознана как команда форматирования текста)
Теперь собственно по теме
1. Я не заметил ни одной закомментированной строчки( может плохо смотрел Улыбаюсь - тож бывает)
2. Что ты подразумеваеш под словом "программно"? Ты хочеш инициализировать матрици некоторыми заранее заданными(ну или генерируемыми по ходу) значениями без участия пользователя?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 20-05-2008 09:51 » 

Янус , при копировании в буфер обмена убедись, что включена русская раскладка - тогда русики не потеряются Ага
Записан

Sands
Помогающий

ua
Offline Offline

« Ответ #3 : 20-05-2008 11:08 » new

Янус, Ну теперь собственно по программе:
1. Если выделяеш память, то неплохо бы по окнчании работы ее освободить;
2. В данной реализации ты считываеш обе размерности второй матрицы, но при етом не проверяеш условия
l == n1
которое является необходимым для возможности нормального умножения;
3. А еще можно в одном цикле сразу и память выделять и данные считывать ))

Остальное будет зависеть от того, как ты ответиш на второй вопрос из моего предыдущего поста ))
« Последнее редактирование: 20-05-2008 11:11 от Sands » Записан
Янус
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 20-05-2008 11:35 » 

Эта программа на данном этапе так сказать полуфабрикат...Проверку выполнять конечно надо, но я уперся в этот вопрос еще на создании скелетной формы.С кракозябрами что-то справится пока не получается Вы уж извините пожалуйста...Вот тут код с проблемной строкой (массив заполняется числами, только вручную,т.е scanf и т.д, а вот как в программе написано ну не хочет и все тут.

Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{

 int i,j,n,l,n1,l1,k;
 double **matr;
 double **matr1;
 double **matr3;
  clrscr();
 printf("‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бва®Є ¬ ваЁжл A:");
 scanf("%d",&n);
 printf("‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв®«Ўж®ў ¬ ваЁжл A:");
 scanf("%d",&l);
     matr=(double**)calloc(n,sizeof(double*));
 for(i=0;i<n;i++)
  { matr[i]=(double*)calloc(l,sizeof(double));
       }
     for(i=0;i<n;i++)
      for(j=0;j<l;j++)
       {
printf("‚ўҐ¤ЁвҐ §­ зҐз­ЁҐ н«Ґ¬Ґ­в  ¬ ваЁжл Ђ:%2d%2d  ",i+1,j+1);
scanf("%d",&matr[i][j]);
}
    printf("ђҐ§г«мв в:");
    for(i=0;i<n;i++)
     { printf("\n");
      for(j=0;j<l;j++)
       printf("%3d",matr[i][j]);
       printf("\n");
}
{
  printf("‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бва®Є ¬ ваЁжл B:");
 scanf("%d",&n1);
 printf("‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® бв®«Ўж®ў ¬ ваЁжл B:");
 scanf("%d",&l1);
      matr1=(double**)calloc(n1,sizeof(double*));
 for(i=0;i<n1;i++)
  { matr1[i]=(double*)calloc(l1,sizeof(double));

       }
  for(i=0;i<n1;i++)
      for(j=0;j<l1;j++)
       {
printf("‚ўҐ¤ЁвҐ §­ зҐз­ЁҐ н«Ґ¬Ґ­в  ¬ ваЁжл B:%2d%2d  ",i+1,j+1);
scanf("%d",&matr1[i][j]);
}
    printf("ђҐ§г«мв в:");
    for(i=0;i<n1;i++)
     { printf("\n");
      for(j=0;j<l1;j++)
       printf("%3d",matr1[i][j]);
       printf("\n");
}
  matr3=(double**)calloc(n,sizeof(double*));
 for(i=0;i<n;i++)
  { matr3[i]=(double*)calloc(l1,sizeof(double));

       }
       {
matr3[1][0]=4;/*Вот здесь я и уперся не работает строка и все тут.*/
}
printf("ђҐ§г«мв в:");
    for(i=0;i<n;i++)
     { printf("\n");
      for(j=0;j<l1;j++)
       printf("%3d",matr3[i][j]);
       printf("\n");
}

 }
 }
« Последнее редактирование: 20-05-2008 12:40 от Вад » Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #5 : 20-05-2008 11:44 » 

А что тебе мешает написать
Код:
int i,j;
for( i = 0; i < n; i++)
 {
    for( j = 0; j < l; j++)
     {
       matr[i][j] = i + j;
     }
 }
i + j тут выбраны произвольно вместо них можно написать любое число или формулу или вызов соответствующей функции. Приведенный в примере код создаст матрицу, в ячейке [i,j] которой будет сумма позиций ячейки в строке и столбце.
И не забывай обрамлять свой код тегами [сode][/сode]
тоесть когда хочеш вставить код программы сначала напиши
[сode]
<Текст программы>
[/сode]
тогда он будет иметь вид, как в твоем посте №1(спасибо Ваду, что подправил).
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines