|
|
|
| SOS!!!!
Написать функцию, решающую указанную ниже задачу. Массив создается в динамической области памяти стандартной функцией calloc(). При обращении к элементам массива воспользоваться взаимосвязью массивов с указателями (косвенная адресация)
сумму элементов массива, расположенных после первого положительного элемента. | |
|
|
|
|
|
|
|
для: kakalukia
(28.10.2008 в 02:25)
| | Пока решил данную задачу на C++, т.е. при помощи new и delete...
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;
void main (void)
{
bool flag=false;
int count=10,sum=0;
cout<<"Enter count of ellements: ";
cin>>count;
int* myArr=new int[count];
for(int i=0;i<count;i++)
{
cout<<"Enter "<<i+1<<" ellement of array: ";
cin>>*(myArr+i);
}
cout<<"Array: ";
for(int i=0;i<count;i++)
{
cout<<" "<<*(myArr+i)<<" ";
if(flag==true)
sum+=*(myArr+i);
else if(*(myArr+i)>0)
{
flag=true;
}
}
cout<<endl<<"Sum of ellements: "<<sum<<endl;
getch();
delete [] myArr;
}
|
Если будет время, то попробую перевести на C :)
Прога написана на Visual Studio 2008 C++ xD GL | |
|
|
|
|
|
|
|
для: kakalukia
(28.10.2008 в 02:25)
| | Вот в первом приближении... Точно не уверен что все так как надо... Но ты если что, пиши! xD
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;
void main (void)
{
bool flag=false;
int count,sum=0;
cout<<"Enter count of ellements: ";
cin>>count;
int* myArr=(int*)calloc(count,sizeof(int));
for(int i=0;i<count;i++)
{
cout<<"Enter "<<i+1<<" ellement of array: ";
cin>>*(myArr+i);
}
cout<<"Array: ";
for(int i=0;i<count;i++)
{
cout<<" "<<*(myArr+i)<<" ";
if(flag==true)
sum+=*(myArr+i);
else if(*(myArr+i)>0)
{
flag=true;
}
}
cout<<endl<<"Sum of ellements: "<<sum<<endl;
getch();
free(myArr);
}
|
| |
|
|
|
|
|
|
|
для: StarWorm
(17.11.2008 в 03:50)
| | Спасибо огромное, что отозвались правда я ее уже написал, но все равно спасибо за ответ.
Я не совсем понимаю как работать с динамической памятью использую new и delete. Не могли бы вы расписать один примерчик, или написать его более понятно. Заранее благодарен и если есть ошибки исправить!!!
__________________________________________________________________________________
Во всех заданиях предусмотреть захват и освобождение динамической памяти (операции new, delete), решение оформить в виде отдельной функции, возвращающей требуемый результат. На печать в виде таблиц вывести исходный двухмерный динамический массив. Размеры массива n, m и исходный массив ввести с клавиатуры в функции main().
Дан целочисленный прямоугольный массив. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент.
его код==>
#include<stdio.h>
#include<conio.h>
#include<windows.h>
int fun(int**,int,int);
void main()
{
int n,m,i,j;
int **mas;
printf("\nenter n");
scanf("%d",&n);
printf("\nenter m");
scanf("%d",&m);
if(n==0){printf("\nerror");}
mas=new int*[n];
for(i=0;i<n;i++) *(mas+i)=new int[m];
printf("\n enter array elements");
for(i=0;i<n;i++){
for (j=0;j<m;j++){
printf("\nmas[%d][%d]=",i,j);
scanf("%d",*(mas+i)+j);}
}
puts("Your array:");
for(i=0;i<n;i++)
{for(j=0;j<m;j++){printf("%d%c",*(*(mas+i)+j),(j==m-1)?'\n':' ');}}
printf("vivod %d stolbca",fun(mas,n,m));
for(i=0;i<n;i++) delete[]mas[i];
delete[]mas;
getch();
}
int fun(int **mas,int a,int b)
{
int i,j,num;
num=0;
for(i=0;i<a;i++)
{for(j=0;j<b;j++)
{if(*(*(mas+i)+j)==0){num=j;break;}}
}
return num;
} | |
|
|
|
|
|
|
|
для: kakalukia
(17.11.2008 в 18:48)
| | Честно... Я не смотрел твое решение, а сам написал новое! Оно точно работает, но не знаю, лучше оно или хуже!
Будет время - может посмотрю...
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;
int numCol(int** arr,int str,int col)
{
for(int j=0;j<col;j++)
for(int i=0;i<str;i++)
if(arr[i][j]==0)
return j+1;
return 0;
}
int main()
{
srand( (unsigned)time( NULL ) );
int min_range=-2,max_range=2;
int n=0,m=0,colZero=0;
cout<<"Enter dimensinsions of array: ";
cin>>n>>m;
int** arr=new int*[n];
for(int i=0;i<n;i++)
arr[i]=new int[m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cout<<"\nEnter element arr("<<i+1<<","<<j+1<<"): ";
//cin>>arr[i][j];
arr[i][j]=(rand()%(max_range-min_range+1))+min_range; //Это для отладки... массив случайных чисел от min_range до max_range
}
cout<<"\n\nYour array is: \n";
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cout<<"\t"<<arr[i][j];
}
cout<<"\n";
}
colZero=numCol(arr,n,m);
if(colZero)
cout<<"\nAnswer: column #"<<colZero<<" have element \'0\' first";
else
cout<<"\nAnswer: no columns with element \'0\'";
getch();
return 0;
delete [] arr;
} |
| |
|
|
|
|
|
|
|
для: StarWorm
(17.11.2008 в 23:53)
| | Спасибо большое. Буду разбираться. Если что можно обращаться??? | |
|
|
|
|
|
|
|
для: kakalukia
(18.11.2008 в 15:31)
| | Конечно обращайся... Протестируй если надо... Может и у меня есть недочеты, т.к. пишу я очень быстро и не всегда все проверяю...
Обычно проверка заключается в нескольких пробных примерах/последовательностях! | |
|
|
|
|
|
|
|
для: StarWorm
(18.11.2008 в 18:39)
| | Я смотрел твой вариант. ОН для меня сложен так как там все написано на С++, а я пока тока Си изучаю. Твой пример я понял тока в общем. Он выбрасывает ошибку из-за #include "stdafx.h". | |
|
|
|
|
|
|
|
для: kakalukia
(20.11.2008 в 03:28)
| | Ну если что... выкинь этот инклуд, должно работать! :)
Ну а про то, что C++, то ты сам привел прогу на C++ (см. выше)
Да и отличие заключается только в выделении памяти...
calloc=new; free=delete и все... | |
|
|
|
|
|
|
|
для: StarWorm
(20.11.2008 в 08:56)
| | Я бы не был столь категоричен. При недостатке памяти calloc возвратит нулевой указатель, а new вызовет исключение. Кроме того, calloc нужно приводить к необходимому типу. | |
|
|
|
|
|
|
|
для: GeorgeIV
(20.11.2008 в 10:04)
| | Я имел ввиду, что в данном случае отличие заключается только в том, что я описал... Т.е. если человек понимает Си, то он и поймет мой код, написанный на C++... Я хотел сказать именно это! :) | |
|
|
|
|
|
|
|
для: StarWorm
(20.11.2008 в 11:21)
| | Я на начальной стадии изучения Си. И решена она не правильна, когда вводишь все положительные числа он выводит что 0 содержится в 0 столбце, хотя должен был писать error, или столбца с 0 значением не существует. Вот поэтому я написал, то что у меня получилось, там такая же ошибка. | |
|
|
|
|
|
|
|
для: kakalukia
(20.11.2008 в 16:03)
| | Черт побери...
Answer: no columns with element \'0\'";
это переводится как Нет таких строчек, которые содержат элемент '0'
Или где у тебя что не так выводится... Конкретный пример с пояснением... | |
|
|
|
|
 102.8 Кб |
|
|
для: StarWorm
(20.11.2008 в 16:15)
| | Посмотри. | |
|
|
|
|
|
|
|
для: kakalukia
(20.11.2008 в 17:45)
| | Объясни нубу, как это посмотреть... Где-то читал, что есть возможность что-то сохранять в формате xml... Но это было давно и неправда! :) | |
|
|
|
|
 116 Кб |
|
|
для: StarWorm
(20.11.2008 в 18:15)
| | Ты не нуб : )) просто проще относиться к этому надо. | |
|
|
|
|
 269 Кб |
|
|
для: kakalukia
(20.11.2008 в 18:19)
| | Ничего не понял... Тупею наверное... Вот тебе мой ответ прикреплен... Посмотри! :) | |
|
|
|
|
|
|
|
для: StarWorm
(20.11.2008 в 18:37)
| | Ну блин, что ты тут скажешь. Я на самом деле твой код использовал, тока без первого include. Все равно спасибо тебе большое)). | |
|
|
|
|
|
|
|
для: StarWorm
(20.11.2008 в 11:21)
| | Ну на сколько я зная С++ вытек из Си, поэтому многое похоже. Я написал, что я в общем понял, но осталось то, что требует пояснения. | |
|
|
|